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'`

์‚ฌ๋ก€

  • ์Šค๋ชฐํ† ํฌ, ๋ฃจ๋น„, ํŒŒ์ด์ฌ์—์„œ ๋• ํƒ€์ดํ•‘์€ ๋งค์šฐ ๋งŽ์ด ์“ฐ์ด๊ณ  ์žˆ๋‹ค.

๊ฒฐ๋ก 

  • ๋™์ ์œผ๋กœ ์ •ํ˜•๋œ ์–ธ์–ด์˜ ๊ฐœ๋ฐœ์€ ์ž์ฃผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •์ฑ…์— ์˜ํ•ด ์ง€์›๋œ๋‹ค.
  • ํ…Œ์ŠคํŠธ๋Š” ์ „๋ฌธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ํ•ต์‹ฌ ๋ฐฉ๋ฒ•์ด๊ณ , ๋™์ ์œผ๋กœ ์ •ํ˜•๋œ ์–ธ์–ด์˜ ๊ฒฝ์šฐ์— ํŠนํžˆ ์ค‘์š”ํ•˜๋‹ค.
  • ์‹ค์ œ๋กœ, ์˜ฌ๋ฐ”๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ–ˆ๋˜ ํ…Œ์ŠคํŠธ๋Š” ์ •์  ์ž๋ฃŒํ˜• ๊ฒ€์‚ฌ๋ณด๋‹ค ํ›จ์”ฌ ๋„“์€ ์˜ค๋ฅ˜ ๋ฒ”์œ„๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋Œ€๋กœ ์ •์  ์ž๋ฃŒํ˜• ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๋‹ค.

Reference