์์์ ๊ฐ๋จํ๊ฒ ๋ณด๋ฉด ๋ณ ๋ฌธ์ ์์ด๋ณด์ด๋, ์ค๋ฌด์ ์ผ๋ก ๋ณด์์ ๋ ์๋นํ ๊น๋ค๋ก์ด ๊ฐ๋ ์ด๋ค.
์์
- ๊ฑฐ์ ๋ชจ๋ ์ฌ๋์ด OOP์ ํต์ฌ์ด๋ผ ์ฌ๊น
- ์ด์ฐฝ๊ธฐ OO
- ์ฌ์ฌ์ฉ์ฑ์ด ๊ถ๊ทน์ ๋ชฉ์ ์ด๋ผ ์ ๋ดํ์์
- ํ์ฌ์๋ ์์ ์ง์ํ์ง ์์ผ๋ฉด OO ์ธ์ด๋ผ๊ณ ๋ณด์ง ์์
- ๋คํ์ฑ์ ๊ธฐ๋ฐ
- ํ๊ตญ ๋จ์ด โ์์โ๋ณด๋ค โ๊ณ์นโ, โ์งํโ, โ์ ์ โ์ ์๋ฏธ๊ฐ ๊ฐํ๋ค.
is-a, has-a
- is-a: ์์๊ด๊ณ
- ์์ํด๋์ค is (still) a ๋ถ๋ชจํด๋์ค
Teacher
is (still) aPerson
- has-a: ์ปดํฌ์ง์
WaterSpray
has aSprayHead
์์ vs. ์ปดํฌ์ง์
- ๋ ๋ค ์ฌ์ฌ์ฉ์ ์ํ ๋ฐฉ๋ฒ
- ์์์ผ๋ก ๊ฐ๋ฅํ ๊ฒ ์ปดํฌ์ง์
์ผ๋ก๋ ๊ฐ๋ฅ
- ๊ธฐ์ ์ ์ธ ๊ด์ ์์ ์ฑํ
- ๋ฐ๋๋ ๊ฐ๋ฅ
- ์ ํธ๋ ๊ณ์ ์๋ค๊ฐ๋คํ์
- ์ด์ฐฝ๊ธฐ๋ ์์ ์ ํธ
- ํ์ฌ๋ ์ปดํฌ์ง์ ์ด ๋ต์ด๋ค๋ผ๋ ์๋ชป๋ ์กฐ์ธ์ ๋ฐ๋ฅด๋ ์ค
- OO์์ ํฐ ๊ฒฐ์ ์ฌํญ: ์์ vs ์ปดํฌ์ง์ ์ค ํ๋๋ฅผ ๊ณ ๋ฅด๋ ๊ฒ.
GuideLine
- ์ค์ํ์์ ๊ฐ์ฑ๋ค๋ผ๋ฆฌ์ ๊ด๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํํ ๊ฒ
- is-a: ์์
- has-a: ์ปดํฌ์ง์
- ํ์ง๋ง ๊ฒฐ๊ตญ์๋ ํ์์ ๋ฐ๋ผ ์ด ๊ท์น์ ์ด๊ฒจ์ผ ํ ๊ฒ์
์ฌ๋์๊ฒ ์์์ด ์ด๋ ค์ด ์ด์
- ์ปดํฌ์ง์ ์ ๊ทธ๋๋ง ์ฌ์ ๋ค. ์ด๋ฏธ ์๋ ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ๋ ๊ฒ์ด๋
- ์์์ ์ค์ธ๊ณ์์ ์ฐพ๊ธฐ ์ด๋ ต๋ค.
- ์ธ๊ฐ์ ์ค์ธ๊ณ์์ ์ง๊ฐ์ ์ ์ผ๋ก ๊ฒฝํํ ๊ฒ์ ์ฝ๊ฒ ์ดํดํ๋ค.
- ํ์ง๋ง ์์์ ์ ์ + ์งํ๋ค.
- ์ค๋์๊ฐ ๊ฑธ์ณ์ ์งํ๋๋ ๊ณผ์ ์ด๋ค.
- ์ด๋ฐ ๋ณํ๋ฅผ ์ผ๋ฐํ์ํค๋ ค๋ฉด ๋งค์ฐ ๋ง์ ์ฌ๋ก๊ฐ ํ์ํ๋ฐ, ์ด๋ฅผ ๋ชจ๋ ์ธ์งํ๊ธฐ์ ์ธ๊ฐ์ ์๋ช ์ด ๋๋ฌด ์งง๋ค.
- ๋ฐ๋ผ์ ๊ฒฝํ์ ๊ธฐ์ดํด์ ์์์ ์ดํดํ๊ธฐ ์ด๋ ต๋ค.
์์์ ์ดํดํ๋ ๋ฐฉ๋ฒ
- ์ผ๋ฐํ/ํน์ ํ ๊ด์
- ๊ธฐ๋ฅ์ ๊ด์
์ผ๋ฐํ/ํน์ ํ
- ์๋๋ก ๊ฐ ์๋ก ํน์ ํ ๊ฐ์ฒด๋ฅผ ์๋ฏธํจ
- ์๋ก ๊ฐ์๋ก ์ผ๋ฐํ๋ ์งํฉ์ ๋งํจ
๊ธฐ๋ฅ
- ๊ณตํต ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๊ทธ๋ก๋ถํฐ ์์๋ฐ์ ์ํ์ ๊ธฐ๋ฅ์ ์ฌํ์ฉ
- ์ฆ ์ฌํ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ด์
์๊ณ ํด๋์ค
- ์, ๋ถ, ์ด๋ฅผ ์์ฑ์๋ก ๋ฐ์.
- ๊ทธ๋ฐ๋ฐ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ด๋ป๊ฒํ์ง?
- Exception? ์ด๊ฑด ๋น์ฅ ์ข์ง ์๋ค.
- ์ค์ธ๊ณ์ ์๊ณ์์ ๋ต์ ์ฐพ์ ์ ์๋ค.(์๋ ๋ก๊ทธ)
- ํ์ฝ์ ๋๋ฆฐ๋ค๋ ๊ฒ์์๋ ๊ฐ์ด ์ปค์ ธ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ์ฆ, circular์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, 12๋ฅผ ๋๋ ์๊ฐ ๋๋จธ์ง์ ํด๋นํ๋ ๊ฐ์ผ๋ก ํ๋จ๋๋ค.
- ์ฌ๊ธฐ์ ๋ฐฐ์ธ ์ ์๋ ์ ์, ์ผ์์ ์์ง๋์ด๋ง ๋ฐฉ์์ ๋ชจ์ฌํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ฃ์ ์ ์๋ค๋ ๊ฒ
- ๊ตฌํ ๋ฐฉ๋ฒ์ ์ฌ๋๋ง๋ค ๋ค๋ฅผ ์ ์์ผ๋ ์๋ต
clamp(h:m:s:)
: 12๋ฅผ ๋์ผ๋ฉด 12, 0๋ณด๋ค ์์ผ๋ฉด 0wrap(h:m:s)
: circular๋ก ๋ง๋ค๊ธฐ
์์์ ํ๋ ํ๋ก๊ทธ๋๋จธ์ ํํ ์ฌ๊ณ ๋ฐฉ์
- ๋ถ๋ชจ๋ฅผ ๋ง๋ค๊ณ ์์์ ๋ง๋ ๋ค: X
- ์์๋ฅผ ๋ง๋ค๋ค๊ฐ ๋ถ๋ชจ๋ก ์ผ๋ฐํ ํ๋ค: O
- ์ฌ๋์ ๊ตฌ์ฒด์ ์ธ ์ฌ๋ก๋ค์ ๋ ์ ์ดํดํ๊ธฐ ๋๋ฌธ
- ๋ค๋ง, ์ด๋ฏธ ๋๊ตฐ๊ฐ๊ฐ ๋ถ๋ฅ๋ฅผ ์ํด๋จ์ ๋๋ ๊ทธ๋๋ก ๋ฐ๋ฅด๋ฉด ๋จ
๋ค์ค ์์
- ๋์งํธ, ์๋ ๋ก๊ทธ ์๊ณ๋ฅผ ๋ง๋ ์ํ์์ ์๊ฐํด๋ณด์.
- ์๋ชฉ์๊ณ๋ฅผ ์๋กญ๊ฒ ๋ง๋ค์ด์ผ ๋๋ค๋ฉด
wear()
method๋ ์ด๋์ ์ถ๊ฐ๋์ด์ผ ํ ๊น? - ์๋ชฉ์๊ณ๋ ๋์งํธ๋ ์๊ณ ์๋ ๋ก๊ทธ๋ ์๋ค.
- ๊ทธ๋ ๋ค๊ณ ๋ถ๋ชจ ํด๋์ค์ธ
Clock
์ ๋ฃ์๋ ๋ชจ๋ ์๊ณ๊ฐwear()
๋์์ ํ์ง๋ ์๊ณ .. - ์ ๋ฒฝ์๊ณํ๊ณ ์๋ชฉ์๊ณํ๊ณ ๋ถ๋ฆฌ๋ฅผ ํด๋ณด์.
- Clock โ WallClock โ AnalogClock, DigitalClock
- Clock โ WristWatch โ AnalogWristWatch, DigitalWristWatch
- ์๋ชฉ ์๊ณ๋ ๋์งํธ, ์๋ ๋ก๊ทธ๊ฐ ์๋ค๋ณด๋ ๊ฐ์ ์ฝ๋๊ฐ ์ค๋ณต๋๋ค..?
- ์์๊ด๊ณ๋ฅผ ๋ฐ๊ฟ๋ณด์.
- Clock โ AnalogClock โ AnalogWallClock, AnalogWristWatch
- Clock โ DigitalClock โ DigitalWristWatch, DigitalWristWatch
- ์ด.. ๊ทธ๋๋ ์ค๋ณต์ด ์๊ธฐ๋ค
- ์ต์ ์ด ๋ญ์ง..?
- source: pocu academy
๋ฌธ์ ์
- Clock์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋๋ฒ ์์๋ฐ๊ณ ์๋ค.
- ์๋ชป ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๋ณต์กํด์ง๋ค.
- Java๋ ๋ค์ค ์์ ์ง์ X, C++ ์ง์
- ์ฃฝ์์ ๋ค์ด์๋ชฌ๋(the Deadly Diamond of Death; DDD)์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
- ๊ฐ์ method๋ฅผ ๊ฐ์ง A, B ๋๊ฐ์ ํด๋์ค๋ฅผ ๋ค์ค์์๋ฐ๋ C ํด๋์ค๊ฐ ์ด๋ค method๋ฅผ ํธ์ถํด์ผํ ์ง ์ ๋งคํจ์ ๊ฐ์ง๋ค๋ ๋ฌธ์
๋ค์ค ์์์ด ์๊ธฐ๋ ์ด์
- ์ ํ ๋ค๋ฅธ ์์(Aspect)์ ํน์ง์ ์์๋ฐ์ผ๋ ค ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ค.
- ์ต์์ ๋ถ๋ชจ(
Clock
): ์๊ฐ์ ๊ธฐ๋กํ๋ ๊ธฐ๋ฅ - Analog vs Digital: ์ด๋ป๊ฒ ํํํ๋๊ฐ?
- Wall vs Wrist: ์ด๋์ ์ฅ์ฐฉํ๋๊ฐ?
- โํํโ๊ณผ โ์ฅ์ฐฉโ์ ์์ ํ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค.
Java์์์ ํด๊ฒฐ๋ฒ
wear()
์mount()
๋ฅผ ์ถ์ํํ์.- ์ด๋์ ๋ถ์ด๋ ๊ฑฐ์์?
attach()
๋ก ํ์น์.- ์๊ณ๋ฅผ ์ฐจ๋ค โ ์๊ณ๋ฅผ ๋ถ์ด๋ค
- ์๊ณ๋ฅผ ๋ฒฝ์ ๊ฑธ๋ค โ ์๊ณ๋ฅผ ๋ฒฝ์ ๋ถ์ด๋ค.
- ๋จ, ๋๋ฌด ์ฌํ ์ถ์ํ๋ ์๋ฏธ๋ฅผ ํด์น ์ ์์
Interface
: ์ด๊ฒ ๋ณด๋ค ๋์ ๋ฐฉ๋ฒ
๊น์ ์์์ ์ด๋ ค์๊ณผ ์๋ฌผ ๋ถ๋ฅ
- ์ฌ๊ธฐ์ ๊ฐ์๊ธฐ ์ ํ์์น ๊ฐ์ ๊ฒ์ด ๋ค์ด๊ฐ๋ค๋ฉด..?
- ํ ๋์จ๋ค.
- ์ด๋ฐ ๊ฒ์ โ๊น์ ์์โ์ด๋ผ ํ๋ค.
- ๊น์ ์์์ ์ด๋ ต๊ธฐ ๋๋ฌธ์ 1~2๋จ๊ณ๋ง ์์ํ๋ ๊ฒ์ด ๋ณดํต์ด๋ค.
- ๊น์ด์ง์๋ก ์ถ์ํ ๋ฅ๋ ฅ์ด ๋ ํ์ํ๋ค. n๋จ๊ณ ์ผ๋ฐํ๊ฐ ํ์.
- ํ์ง๋ง.. ์ถ์ํ๋ ์ธ๊ฐ์๊ฒ ์ด๋ ค์ด ๋ฐฉ์. ์ค์ํ ๊ฐ๋ฅ์ฑ๋ ์ฆ๊ฐ