만약 어떤 새가 오리처럼 걷고 헤엄치고 꽥꽥거리면 그것은 오리다 라는 덕테스트에서 유리한 개념이다.
본질적으로 다른 클래스더라도 객체의 적합성이 객체의 실제 유형이 아니라 특정 메소드와 속성의 존재에 따라 결정된다는 개념이다.
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'`
덕타이핑이 없는 언어라면 객체의 타입을 우선적으로 검사하겠지만 덕타이핑이 있는 언어는 객체의 타입을 검사하지 않는다.
그러다가 메소드가 호출되는 시점에서 구현되어있지 않다면 에러가 발생하는 방식이다.