1. Question
덕 타이핑이란 OOP에서 사용하는 개념 중 하나이다. 동적 언어 (Dynamic Langauge; 동적 타입)에서 사용하는 개념으로 클래스를 명명하는 것으로 타입을 결정하는 것이 아니라, 객체의 변수 및 메소드의 집합이 객체의 타입을 정하는 것을 의미한다.
어려운가? 일단 덕 타이핑에 대해 한 문장으로 표현한 말을 보도록 하자.
"만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다."
이 말은 OOP에서 클래스와 인터페이스로 구분되는 기존 패러다임에서 벗어나, 객체를 미리 판단하지 않고 변수와 메소드가 사용되는 때에 객체를 판단하겠다는 의미이다.
덕 타이핑을 통해 개발자는 함수를 구현할 때 마치 제네릭이 기본인 것 같은 느낌을 받는다. 타입에 대한 자유로운 개발이 큰 장점으로 작용한다.
문제는 유지보수. 덕 타이핑 관련 버그는 해결하기 뭣 같은 걸로 유명하다. 처음에는 당연히 작동하는 것만 주다가 이후 기능을 확장하는 과정에서 이상한거 던져주고는 "이거 왜 안되지" 하고 있는 경우가 허다하다.
2. Practice
간단한 실습을 통해 덕 타이핑을 이해해보자.
다음 코드는 위키피디아의 파이썬 덕 타이핑 예제이다.
이 코드에서 무리 없이 오리와 사람의 quack, feathers 함수가 실행되는 것을 볼 수 있다.
C++ 같은 정적 타입에서 이를 수행하기 위해서는 제네릭을 활용해야 한다.
이 경우 제네릭을 생각하고 짜야하기 때문에 해당 문법도 알고 있어야하지만, 이후 기능을 확장할 때 제네릭을 상기시킬 수 있기 때문에 유지보수에 유리해진다.