반응형
목차
🦆 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
'프로그래밍' 카테고리의 다른 글
로커스트(Locust) @task vs tasks 비교해보자 (0) | 2025.04.09 |
---|---|
토큰으로 검증하자! JWT(JSON 웹 토큰) (0) | 2025.04.07 |
Python 코드로 테스트 가능한 로커스트(Locust) (0) | 2025.04.03 |
NginX와 SSL 인증서로 보안 연결 설정하기 (0) | 2025.03.30 |
JsonUtility 유니티에서 가볍고 빠르게 JSON 직렬화 하기 (0) | 2025.03.24 |
댓글