04
main thema : ๊ฐ์ ํจ์.
๊ฐ์์ ๋ํ ๊ฐ๋ ์ ์ ๊ณผ์ ์์ ์ ๋ฆฌ.
ex00
๋ชฉ์ : Polymorphism๊ณผ virtual ์๋ฉธ์ ๋ฐ ํจ์.
Animalํด๋์ค๋ฅผ ์์ํ๋ Cat๊ณผ Dogํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ฐ ๋๋ฌผ์ ์๋ฆฌ ๋ฐ ์๋ฉธ์๋ฅผ ๊ฐ์์ผ๋ก ์ ์ธ.
๋คํ์ฑ(Polymorphism)
๋คํ์ฑ(ๅคๅฝขๆง, polymorphism; ํด๋ฆฌ๋ชจํผ์ฆ)์ ๊ทธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์๋ฃํ ์ฒด๊ณ์ ์ฑ์ง์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก, ํ๋ก๊ทธ๋จ ์ธ์ด์ ๊ฐ ์์๋ค(์์, ๋ณ์, ์, ์ค๋ธ์ ํธ, ํจ์, ๋ฉ์๋ ๋ฑ)์ด ๋ค์ํ ์๋ฃํ(type)์ ์ํ๋ ๊ฒ์ด ํ๊ฐ๋๋ ์ฑ์ง์ ๊ฐ๋ฆฌํจ๋ค. ๋ฐ๋๋ง์ ๋จํ์ฑ(monomorphism)์ผ๋ก, ํ๋ก๊ทธ๋จ ์ธ์ด์ ๊ฐ ์์๊ฐ ํ๊ฐ์ง ํํ๋ง ๊ฐ์ง๋ ์ฑ์ง์ ๊ฐ๋ฆฌํจ๋ค.-์ํคํผ๋์-
๋คํ์ฑ์ ์ํด ๊ฐ์ฒด์ ๋งด๋ฒ ์ํฉ(cast)์ ๋ฐ๋ผ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง์ ์๋ค. ์ด๋ overridng๊ณผ virtual๊ฐ์ ํค์๋ ๋ฑ์ ์ํด ์๊ธด๋ค.
- Animalํด๋์ค๋ฅผ ์์ํ๋ Cat๊ณผ Dogํด๋์ค๋ ๋๊ฐ์ด
void makeSound()
๋ผ๋ ํจ์๋ฅผ ์์๋ฐ์ง๋ง, ๊ฐ์์ ๊ตฌํ์ ์ํด ์ ํ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
ex01
๋ชฉ์ : deep copy
ํฌ์ธํฐํ ๋งด๋ฒ๋ฅผ ๋ณต์ฌํ๋ ๊ฒฝ์ฐ,
- ํฌ์ธํฐ ์ฃผ์๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ๋ฉด ์์ ๋ณต์ฌ.
- A๋ฅผ ์์ ๋ณต์ฌํ ๊ฐ์ฒด๊ฐ B๋ผ๋ฉด, A๊ฐ ๋ณ๊ฒฝ๋๋ฉด B๋ ๊ฐ์ด ์์ ๋๋ค(ํฌ์ธํฐ๋ง ๋ณต์ฌํด์).
- ๋ณต์ฌํ ํฌ์ธํฐ์ ๋ค๋ฅธ ์ ์ฅ๊ณต๊ฐ์ ๋ด์ฉ์ ๋ณต์ฌํ๋ฉด ๊น์ ๋ณต์ฌ.
- A๋ฅผ ๊น์ ๋ณต์ฌํ ๊ฐ์ฒด๊ฐ B๋ผ๋ฉด, A์ B๊ฐ์ฒด๋ ์ ํ ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ค.
์์ ๋ณต์ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ํดํธ ๋ณต์ฌ์์ฑ์/์ฐ์ฐ์๊ฐ ์ฐ๋ ๋ฐฉ์์ด๊ณ , ๊น์๋ณต์ฌ๋ฅผ ํ๋ฌ๋ฉด ์ด๋ฅผ ๋ณ๋๋ก ๊ตฌํํด์ฃผ์ด์ผํ๋ค.
deep copy์ ๋ฐ๋ฅธ ์ํฅ์ main๋ฌธ ์ฐธ๊ณ .
ex02
๋ชฉ์ : ์ถ์ ํด๋์ค ๊ตฌํ ๋ฐ ์ฌ์ฉ.
์ธํฐํ์ด์ค์ฒ๋ผ ์ธ์คํด์คํ ๋์ง ์๋ ํด๋์ค๋ก animalํด๋์ค๋ฅผ ๊ตฌํํ๋ค.
- ์์ ๊ฐ์ํจ์๊ฐ ํ๋๋ผ๋ ์๋ ํด๋์ค๋ ์ถ์ํด๋์ค์ด๋ฉฐ, ์ธ์คํด์คํ ๋ถ๊ฐํ๋ค(์ปดํ์ผ ์๋ฌ ๋ฐ์).
- canonical form ๋ฐ getter๋ฅผ ์ ์ธ/์ ์ํ๋ค. ์ธ์คํด์คํ๊ฐ ๋ถ๊ฐํ์ง๋ง, ์์ํด๋์ค์์ ์ฌ์ฉํ ์๋ ์์ผ๋ฏ๋ก.
ํํ
virtual void makeSound() const = 0;
์ธ์คํด์คํ ์๋์ ๋ฐ์ํ๋ ์ปดํ์ผ ์๋ฌ
C++ error: object of abstract class type is not allowed: pure virtual function has no overrider