์ถ์ํด๋์ค๋ ์ ํ์ํ ๊น?
๋คํ์ฑ์ ๋ฉ์ง๊ณ ๊ฐ๋ ฅํ ๊ฐ๋
- OO 4๋ ํน์ฑ์ธ ์ด์ (์์, ์บก์ํ, ๋คํ์ฑ, ์ถ์ํ)
- ๋คํ์ฑ์ ์์์ ๊ธฐ๋ฐ
- ์์๊ณผ ๋คํ์ฑ์ ์ถ์ํ์ ๊ธฐ๋ฐ
- ๊ณตํต๋ ๊ฒ์ ๋ฝ์๋ด์ด ์ผ๋ฐํ๋, ๋ฒ์ฉ์ ์ธ ๊ฒ์ผ๋ก ์ ์ฉ
- ์ฌ๋ฌ ํด๋์ค์์ ๊ณตํต ๋ถ๋ชจ๋ฅผ ๋ฝ์ ๋ถ๋ชจ ํด๋์ค๋ก ์ ์
- ์์๋ง๋ค ๋ฌ๋ฆฌ ์๋ํ๋ ๊ตฌํ์ ๋ถ๋ชจ์ method signature๋ก ์ผ๋ฐํ
- ์ถ์ํ๋ ์กฐ๊ธ๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ
์๋ก์ด ๊ฐ๋ ์ ์๋ก์ด ๋ฌธ์ ๋ ๊ฐ์ ธ์จ๋ค
- ์ถ์ํ๋ ๋ง๊ฐํ์ง๋ง ๊ทธ๋ก ์ธํด ์๊ฐ์ง ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์
- ์ญ์ ์ฌ๋์ ์ง์ ํด๋ณด๊ณ ๋นํด๋ด์ผ ๋ต์ ์ฐพ์
- ์๋ก์ด ๊ฐ๋ == ์ํํจ
- ์ถฉ๋ถํ ๊ฒ์ฆ์ด ์๋ค๋ฉด ์ ๋ขฐ๋ ์๋ ๊ฒ.
- ํ ์คํธ ์ฉ์ผ๋ก ์ฌ์ฉ์ ๊ฐ๋ฅํ๋, ํ๋ก๋ํธ์ ๋ฃ๋ ๊ฒ์ ์ ์คํ.
- ์์ฒญ ์ข๋ค๋ผ๊ณ ๋งํ๋ ์ฌ๋์๊ฒ ๊ผญ ์ง๋ฌธํด์ผ ํ๋ ๊ฒ์ โ๋จ์ ์ด ๋ญ๋ฐ?โ
๋งจ๋ ์ธ์ฐ๋ ๋ชฌ์คํฐ
- ๋ชฌ์คํฐ: ์ค์ฐ๊ฑฐ, ์ ๋ น, ํธ๋กค
- ๊ณต๊ฒฉํ๋ ๋ชฌ์คํฐ ์ข ๋ฅ์ ๋ฐ๋ผ ํผํด์น ๊ณ์ฐ๋ฒ์ ๋ค๋ฅด๊ฒ ์ ์ฉํ ์์
- ๋์ค์ ๋ชฌ์คํฐ ์ข ๋ฅ๋ฅผ ์ถ๊ฐํ ์๋ ์์ == ๋คํ์ฑ์ผ๋ก ์ค๊ณ๊ฐ ์ ํฉ
์ํ์ ๋์
- ์ํ
- HP
- ์์กด ์ฌ๋ถ
- ๊ณต๊ฒฉ๋ ฅ
- ๋ฐฉ์ด๋ ฅ
- ๋์
- ๊ณต๊ฒฉํ๋ค
์ค์ ๋์
๋คํ์ฑ์ด ํ์ํ ๋ถ๋ถ์ ๋๋ฌด ๋๊ฒ ๋ด
- ๊ทผ๋ฐ ์ฌ๊ธฐ์
target.inflictDamange()
๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด? - ํธ์ถํด๋ hp๊ฐ ์๊น์ด๋ ๋ฌธ์ ๊ฐ ์๊น
- ๊ตณ์ด ์์ํํ ์ด ์ญํ ๊น์ง ๋ฐ๋ผ๋๊ฒ ๋ง์์๊น?
- ํผํด๋๋ง ๊ณ์ฐํ๋ผ๋ ์ฑ ์๋ง ๊ตฌํํ๋๋ก ํ๋ ๊ฒ์ด ๋ง๋ค.
calculateDamage๋ฅผ ์์ ๊ตฌํ์ ์ํ๋ค๋ฉด..?
- ์์ฒ๋ผ ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์์ผ๋..
- ์ฌ์ฉํ๋์ชฝ์ ๋ฏฟ์ ์ ์๋ค.
calculateDamage()
๋ฅผ override๋ฅผ ์ํ๋ฉด ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.- ์ด๋ ์ด๋ฏธ 0์ ๋ฐํํ๋ ๊ตฌํ์ด Monster์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ตฌํ์ ๊ฐ์ ํ๊ณ ์ถ์๋ฐ, ์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น?
- ์ฌ์ค ๊ตฌํ์ ์์ ๋ฉด ๋๋ค.
๊ตฌํ์ด ์๋ ๋ฉ์๋
- signature๋ ์์
- ๋ด๋ถ ์ฝ๋๋ ์์
- ๋์์ด ์ผ๋ถ๋ผ๋ ๊ตฌํ๋์ง ์์ ํด๋์ค๋ ์ค์ฒด๊ฐ ์์ฑ๋์ง ์์ ํด๋์ค
- not concrete
- == abstract
- ์ฌ์ค C์์๋ ์ ์ธ๊ณผ ๊ตฌํ์ด ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ง๊ด์ ์ผ๋ก ๋ค๊ฐ์จ๋ค.
- ์๋ฐ๋ ์ด๊ฒ ์ฌ์ค ์๋๊ธดํ๋ค.
์ ์ด์ ๋ฌธ์ ๋ ์๋ค.
- Monster๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ๊ฒ์ด ๋ง์ด๋๋๊ฐ?
- ์ด๋ Group์ ๋๋๊ธฐ ์ํ ์ฉ๋๋ก์ ์กด์ฌํ๋ค. ์ฆ, ์ถ์์ ์ด๊ณ , ์ผ๋ฐํ๋์ด ์๋ค.
- ์ด๋ ์ข ๋ฅ์๋ ์ํ์ง ์๋ Monster๋ฅผ ์์ฑํ๋ ๊ฑด ๋ญ๊ฐ ์ด์ํ๋ค. ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋ง์ด ์กด์ฌํ ์ ์๋ค.
- ์ฆ, ๋ฉ์๋ ๊ตฌํ ์ฌ๋ถ์ ์๊ด์์ด ๊ทผ๋ณธ์ ์ผ๋ก ์กด์ฌํ๋ ๋ฌธ์ ๋ค.
๋ชฉํ
Monster
์ ์์ ํด๋์ค๊ฐcalculateDamage()
๋ฅผ ๋ฌด์กฐ๊ฑด ๊ตฌํํ๊ฒ ํ๋ค.Monster
๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ง ๋ชปํ๊ฒ ํ๊ณ ์ถ๋ค.
๊ตฌํ์ด ์๋ ๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค๊น
- Java๋ C์ฒ๋ผ ์ ์ธ๊ณผ ๊ตฌํ์ด ๋ถ๋ฆฌ๋์ด์์ง ์๋ค.
- ๊ตฌํ์ ๊ทธ๋ฅ ์์ ๊ณ
calculateDamage();
์ด๋ฐ์์ผ๋ก ์ฐ๋ฉดabstract
๊ฐ ๋น ์ก๋ค๋ ๋ฑ์ ์๋ฌ๋ฅผ ๋ณธ๋ค. - ๊ทธ๋์ method ์์
abstract
๋ฅผ ๋ฌ๊ณ ์ปดํ์ผ ํด๋ณด๋ฉด, ์ด๋ฒ์๋ class๊ฐabstract
๊ฐ ์๋๋ผ๋ ์๋ฌ๋ฅผ ๋ณธ๋ค. - ์ฆ, Method๊ฐ abstract๋ฉด class๋ abstractํ ๊ฑด์ง ํ์ธํด๋ณด์์ผ ํ๋ค.
- ์ฌ์ค method๊ฐ abstract๋ฉด, ์ฆ ๊ตฌํ์ ํ์ง ์๋๋ค๋ฉด ์ด method๊ฐ ์ํ class๋ ์ถ์์ ์ด๋ผ ํ ์ ์๋ค.
- ๋ง์ฝ ๊ทธ๊ฒ์ด ์ฑ๋ฆฝํ์ง ์๋๋ค๋ฉด
abstract
๋ก ์ ์ธํ ํจ์์ ๋ํด์Monster
์ธ์คํด์ค๊ฐ ๋ฉ์๋๋ฅผ ์ ๊ทผํ ์ ์๋ค๋ ๋ง์ธ๋ฐ, - method์ ๊ตฌํ์ด ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฆฝ์ด ๋ถ๊ฐํ๋ค.
- ์ฆ, Method๊ฐ abstract๋ฉด class๋ abstractํ๋ค.
์ถ์ ํด๋์ค
- Class diagram์์๋ italic์ผ๋ก ํ๊ธฐ (class name, method name)
abstract class
๋ก ๋ง๋ค๋ฉด ๋จ- ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์์
- ๋ค๋ฅธ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค๊ฐ ๋ ์๋ ์์
- ๋ฐ๋์ ์ถ์ ๋ฉ์๋๊ฐ ๋ค์ด์์ ํ์๋ ์์. ์ฆ, ๊ตฌํ์ด ๋ค์ด๊ฐ ์๋ ํจ์๋ ์์ ์ ์์