🐍Python | Django

[Python] Duck Typing?

이줭 2022. 5. 22. 21:18
728x90

파이썬은 덕타이핑을 지원하는 언어라는 말을 많이 들어봤는데 덕타이핑이 뭐지??

 

Duck Typing

- If it walks like a duck and it quacks like a duck, then it must be a duck

해석해보면 "오리처럼 걷고, 오리처럼 꽥꽥거리면 그것은 틀림없이 오리다."라는 뜻이다. 🦆

 

파이썬에서 덕타이핑을 지원한다는 뜻은 동적 타입의 언어에서 본질적으로 다른 클래스라도 객체의 적합성은 실제 유형이 아니라 특정 메서드와 속성의 존재에 의해 결정된다는 말이다. 🤔

 

이렇게 들어서는 잘 이해가 되지 않으니 아래의 예시를 보자.

class Duck():
    def sound(self):
        print('꽥꽥')
    
class Dog():
    def sound(self):
        print('멍멍')
        
class Fish():
    def swim(self):
        print('헤엄')
        
def get_sound(animal):
    animal.sound()
    
duck = Duck()
dog = Dog()
fish = Fish()

get_sound(duck) # 꽥꽥
get_sound(dog) # 멍멍
get_sound(fish) # 에러발생! (AttributeError)

클래스 내부에 동일한 메서드가 있는것만으로도 get_sound에서 정상적으로 호출되는 것을 확인할 수 있고, Fish 같은 경우 메서드가 없기 때문에 AttributeError가 발생한다.

 

즉, 속성과 메서드의 존재에 의해 객체의 적합성이 결정된다.

 

JAVA에서는 상상도 할수 없는 일인데😨, 언뜻 보면 굉장히 편리해 보이긴 한다. 어떤 사이드 이펙트가 있을지는 조금 더 알아봐야겠다.

 

참고 : https://yujuwon.tistory.com/entry/%EB%8D%95%ED%83%80%EC%9D%B4%ED%95%91

https://en.wikipedia.org/wiki/Duck_typing 

https://wikidocs.net/16076

728x90

'🐍Python | Django' 카테고리의 다른 글

[Python] enumerate()  (0) 2022.05.25
[Python] Exception 추적  (0) 2022.05.23
[Python] Comprehension?  (0) 2022.05.20
[Python] Type Check - type(), isinstance()  (0) 2022.05.18
[Python] lstrip(), rstrip(), strip()  (0) 2022.05.17