본문 바로가기
Programming/python

[Python] 덕타이핑?

by 유주원 2015. 3. 1.

파이썬은 duck typing을 지원하는 언어이다.


Duck Typing이 무엇이냐 하면..

만약에 어떤 새가 오리처럼 걷고 꽥꽥거리는 소리를 낸다면, 그 새를 오리라고 간주한다는 것이다.


A라는 클래스와 B라는 클래스가 있고, 이것을 파라미터로 받는 함수가 존재한다고 가정하자.

아래와 같은 형태가 될 것이다.


public void TestFunction(Class param)


위 형태를 만족하려면 A클래스와 B클래스는 같은 부모로부터 상속을 받은 클래스이어야 한다.

아무리 A클래스의 함수와 B클래스의 함수가 동일하고 해당하는 값이 동일하다고 하더라도, C++이나 JAVA에서는

위 두 개의 클래스를 동일한 Type으로 간주하지 않는다.

(그렇기 때문에 추상클래스라는게 있는거고.. 인터페이스를 고려해서 설계해야 하는 등등)


하지만 python 언어는 duck typing을 지원하기 때문에 A클래스가 가진 함수와 B클래스가 가진 함수가 같다면,

A클래스와 B클래스를 동일한 타입으로 본다.

말 그대로 B클래스가 A클래스처럼 행동하기 때문에, 파이썬에서는 B클래스를 A클래스와 같은 타입이라고 간주하는 것이다.


그렇기 때문에 아래와 같은 코드 구현이 가능해진다. C++이나 JAVA에서는 상상도 할 수 없다.


class Duck:

   def sound(self):

      print u"꽥꽥"


class Dog:

   def sound(self):

      print u"멍멍"

def get_sound(animal):

   animal.sound()


def main():

   bird = Duck()

   dog = Dog()

   get_sound(bird)

   get_sound(dog)


얼핏봐도 무척이나 편리하게 느껴진다. 하지만 어떤 side_effect가 있을런지는 솔직히 잘 모르겠다.

C++이나 JAVA에 익숙해져서 그런지.. 먼가 다른 클래스를 넘기면서도 찜찜한 이기분..