Python duck typing

Minseop Jeong·2022년 2월 13일
0

Python duck typing 이란

  • 동적 타이핑의 한 종류로, 다른 클래스더라도 객체의 변수 및 메소드의 집합이 객체의 타입을 결정하는 것을 말한다.

  • duck typing 이라는 용어는 "만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다" 라는 덕테스트 에서 유래됐다.

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

  • duck typing이 없는 언어는 인자로 받는 객체의 타입을 검사한다. (i.e. java)

  • duck typing이 있는 언어는 인자로 받는 객체의 타입을 검사하지 않는다. 특정 메소드를 호출할 시점에 객체에 특정 메소드가 구현돼 있지 않다면 런타임 에러가 발생되고, 아니라면 그 객체의 특정 메소드가 호출된다.

duck typing 예시

아래 예제 코드에서 act() 함수가 호출될 때 인자의 타입을 검사하지 않는다.

class Duck:
    def fly(self):
        print("Duck flying")

class Parrot:
    def fly(self):
        print("Parrot flying")

class Whale:
    def swim(self):
        print("Whale swimming")

def act(entity):
    entity.fly()

for animal in [Duck(), Parrot(), Whale()]:
    act(animal)

Output

Duck flying
Parrot flying
AttributeError: 'Whale' object has no attribute 'fly'

duck typing 장점

  • 더 적은 코드와 더 간결한 상속 구조를 갖는다.
  • 인터페이스를 작성하지 않고 사용할 메소드를 작성하면 된다.

duck typing 단점

  • 간결한 구조지만 런타임 에러가 발생할 수 있다.
  • 다른 사람과의 코드 협업시 주의가 필요하며, 테스트 코드를 충분히 작성해야 한다.

Reference

profile
Data Engineer

0개의 댓글