본문 바로가기
프로그래밍

일단 호출하고 보자! 덕 타이핑(Duck Typing)이란?

by bantomak 2025. 4. 4.
반응형

🦆 Duck Typing이란?

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

("걷는 모습이 오리 같고 오리처럼 꽥꽥거리는 소리를 낸다면, 그건 오리야!")

  • 동적 타이핑의 한 종류로, 객체의 변수 및 메서드를 호출하는 시점에서 해당 객체의 타입을 결정하는 방식
  • 즉, 객체의 실제 타입(type)을 따지지 않고, 그 객체가 어떤 행동을 할 수 있는지만을 보고 판단
  • 객체의 형식(interface)보다 행동(behavior)을 중시한다.

일단 호출하고 보자!

Python 예제 코드

class Duck:
    def quack(self):
        print("Quack!")

class Person:
    def quack(self):
        print("I'm quacking like a duck!")

def make_it_quack(thing):
    thing.quack()

duck = Duck()
person = Person()

make_it_quack(duck)    # Quack!
make_it_quack(person)  # I'm quacking like a duck!

 

위 코드에서 make_it_quack() 함수는 파라미터 thing이 quack() 메서드만 가지고 있으면 타입이 뭐든지 상관없이 호출한다.

> 이게 바로 덕 타이핑(Duck Typing)이다!

만약 quack() 메서드를 정의하지 않은 클래스의 경우는?

class Duck:
    def quack(self):
        print("Quack!")

class Person:
    def quack(self):
        print("I'm quacking like a duck!")

class Monster:
    def crawling(self):
        print("I'm monster!")

def make_it_quack(thing):
    thing.quack()

duck = Duck()
person = Person()
monster = Monster()

make_it_quack(duck)    # Quack!
make_it_quack(person)  # I'm quacking like a duck!
make_it_quack(monster)

Monster 클래스는 quack() 메서드가 없기 때문에 에러 발생!

Duck Typing의 장점

  • 유연하고 간결한 코드 작성 가능
  • 상속이나 인터페이스 없이 빠르게 다형성 구현 가능
  • 테스트나 모킹(mocking)이 쉬움

Duck Typing의 단점 (편리함에는 대가가 따른다!)

  • 실수(오타, 존재하지 않는 메서드 등) 컴파일 시점에 잡을 수 없음. > 런타임에서 예외 발생
  • 자동 완성, 정적 분석 도구 활용이 어려움
  • 디버깅이 어렵고, 런타임 오류 가능성이 증가

같이 읽으면 좋은 글

 

리눅스(Linux) 파일에 확장자가 없는 이유

리눅스는 확장자에 의존하지 않는다이는 리눅스의 파일 시스템 설계와 철학이 맞닿아 있는 부분이다. 리눅스는 파일 이름과 파일의 확장자를 특정 용도로 강제하지 않는다. 즉, 파일의 유형이

jettstream.tistory.com

댓글