Duck Typing
๋ง์ฝ ์ด๋ค ์๊ฐ ์ค๋ฆฌ์ฒ๋ผ ๊ฑท๊ณ , ํค์์น๊ณ , ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ์๋ฆฌ๋ฅผ ๋ธ๋ค๋ฉด ๋๋ ๊ทธ ์๋ฅผ ์ค๋ฆฌ๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์ด๋ค.
- ์ฌ๋์ด ์ค๋ฆฌ์ฒ๋ผ ํ๋ํ๋ฉด ์ค๋ฆฌ๋ก ๋ด๋ ๋ฌด๋ฐฉํ๋ค๋ผ๋๊ฒ ๋ ํ์ดํ(Duck Typing)์ด๋ค.
- ํ์ ์ ๋ฏธ๋ฆฌ ์ ํ๋๊ฒ ์๋๋ผ ์คํ์ด ๋์์ ๋ ํด๋น Method๋ค์ ํ์ธํ์ฌ ํ์ ์ ์ ํ๋ค.
- ์ฅ์
- ํ์ ์ ๋ํด ๋งค์ฐ ์์ ๋กญ๋ค.
- ๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ธฐ๋ฅ๊ณผ ์๋ฃํ์ ์ฐฝ์ถํ๋ ๊ฒ
- ๋จ์
- ๋ฐํ์ ์๋ฃํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค ๋ฐํ์์์, ๊ฐ์ ์์์น ๋ชปํ ์ ํ์ด ์์ ์ ์๊ณ , ๊ทธ ์๋ฃํ์ ๋ํ ๋ฌด์๋ฏธํ ์์ ์ด ์ ์ฉ๋๋ค.
- ์ด๋ฐ ์ค๋ฅ๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ค์ ๊ตฌ๋ฌธ์์ ์ค๋ ์๊ฐ ํ์ ๋ฐ์ํ ์ ์๋ค
- ๋ฐ์ดํฐ์ ์๋ชป๋ ์๋ฃํ์ ์ฅ์๋ก ์ ๋ฌ๋๋ ๊ตฌ๋ฌธ์ ์์ฑํ์ง ์์์ผ ํ๋ค. ์ด๊ฒ์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ค์ธ ์๋ ์๋ค.
Example Code
class Parrot:
def fly(self):
print("Parrot flying")
class Airplane:
def fly(self):
print("Airplane flying")
class Whale:
def swim(self):
print("Whale swimming")
def lift_off(entity):
entity.fly()
parrot = Parrot()
airplane = Airplane()
whale = Whale()
lift_off(parrot) # prints `Parrot flying`
lift_off(airplane) # prints `Airplane flying`
lift_off(whale) # Throws the error `'Whale' object has no attribute 'fly'`
์ฌ๋ก
- ์ค๋ชฐํ ํฌ, ๋ฃจ๋น, ํ์ด์ฌ์์ ๋ ํ์ดํ์ ๋งค์ฐ ๋ง์ด ์ฐ์ด๊ณ ์๋ค.
๊ฒฐ๋ก
- ๋์ ์ผ๋ก ์ ํ๋ ์ธ์ด์ ๊ฐ๋ฐ์ ์์ฃผ
๋จ์ ํ ์คํธ
์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ ์ฑ ์ ์ํด ์ง์๋๋ค. - ํ ์คํธ๋ ์ ๋ฌธ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ํต์ฌ ๋ฐฉ๋ฒ์ด๊ณ , ๋์ ์ผ๋ก ์ ํ๋ ์ธ์ด์ ๊ฒฝ์ฐ์ ํนํ ์ค์ํ๋ค.
- ์ค์ ๋ก, ์ฌ๋ฐ๋ฅธ ํ๋ก๊ทธ๋จ์ด ์๋์ ๋ณด์ฅํ๊ธฐ ์ํด ํ๋ ํ ์คํธ๋ ์ ์ ์๋ฃํ ๊ฒ์ฌ๋ณด๋ค ํจ์ฌ ๋์ ์ค๋ฅ ๋ฒ์๋ฅผ ๊ฐ์งํ ์ ์์ง๋ง, ๋ฐ๋๋ก ์ ์ ์๋ฃํ ๊ฒ์ฌ๊ฐ ๊ฐ์งํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ข ํฉ์ ์ผ๋ก ๊ฒ์ํ ์ ์๋ค.