[Python] Duck Typing

hyunsooo·2023년 10월 17일
0

최근에 면접 보면서 Duck Typing에 대한 질문을 받게 되었는데 제대로 답변을 못하여 이번 기회에 깔끔하게 개념을 정리하겠습니다.

일반적으로 C, C++, JAVA와 같은 대부분의 컴파일 언어들은 정적 타이핑(Static Typing)으로 분류합니다. 반면에 파이썬은 동적 타이핑(Dynamic Typing)을 지원하는 언어라고 합니다.

int a;
String b;
a = 1;
b = 'JAVA'

JAVA의 경우 변수의 타입을 사전에 지정을 하고 변수에 값을 할당하는 방식을 사용하게 됩니다. 이렇게 변수의 타입을 사전에 지정하게 되면 Type error로 인한 문제를 조기에 발견하기 쉬운 장점이 있습니다.

a = 1
b = 'Python'

반면에, 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은 오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없는 오리라는 의미를 가지고 있습니다.

위에서 설명한 동적 타이핑은 클래스에서도 적용이 되는데 객체의 실체 유형이 아니라 특정 메소드와 속성의 존재에 의해 결정되는 것이 Duck Typing입니다.

class Duck:
    def quack(self): 
        print("꽥꽥!")
    def feathers(self):
        print("오리에게 흰색, 회색 깃털이 있습니다.")

class Person:
    def quack(self): 
        print("이 사람이 오리를 흉내내네요.")
    def feathers(self):
        print("사람은 바닥에서 깃털을 주워서 보여 줍니다.")

def in_the_forest(duck):
    duck.quack()
    duck.feathers()

def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)

파이썬에서는 같은 메소드가 있는것으로도 in_the_forest함수에서 정상적으로 작동하는 것을 확인할 수 있습니다. 만약 Person 클래스에 quack()메소드가 존재하지 않는다면 런타임시 AttributeError가 발생하게 됩니다. 이처럼 Python에서의 객체의 적합성은 속성 및 메소드의 존재에 의해 결정됩니다.

profile
지식 공유

0개의 댓글