오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없이 오리다.
위키피디아 - 덕 테스트
덕 타이핑이란, 덕 테스트에서 영향을 받은 동적 타이핑의 한 종류다.
객체의 메소드 존재 여부 등으로 객체의 타입을 결정하는 것을 의미해요. 즉, 객체가 무엇을 할 수 있는지 없는지로 타입을 구분하는 것이다.
아래 예시가 바로 그 상황이다.
class Duck {
sound() {
console.log("꽦꽦!!!!!")
}
}
class Chunsick {
sound() {
console.log("꽦꽦!!!!!")
}
}
const duck = new Duck()
const chunsick = new Chunsick()
duck.sound() // 꽦꽦!!!!!
chunsick.sound() // 꽦꽦!!!!!
duck
과 chunsick
모두 sound 함수에서 *꽦꽦!!!!!*을 출력하고 있는걸 볼 수 있다. 즉, 덕 타이핑에서는 duck
과 chunsick
을 같은 타입으로 본다.
여러 글을 찾아본 결과 주로 다음과 같은 장단점을 말하는 것 같다.
장점
- 덕 타이핑은 더 적은 코드와 복잡한 상속 구조가 덜 필요하다. 따로 인터페이스를 지정할 필요가 없고, 사용할 메서드를 작성하면 되기 때문이다.!
- 1번의 장점은 복잡한 기능으로 여러 클래스에서 빌드할 때 가장 눈에 띈다.
generic hell
과 같은 상황이 일어나기 어렵기 때문이다. - 다형성, SOLID등.. 다른 개념들보다 이해하기 매우 쉽다.
단점
- 간결함이 의도치 않은 동작을 만들 때가 있다.
- 다른 사람과 협업에서 조금 더 주의가 필요하다. 해당 메소드에 대해서 잘 알지 못한다면 코드가 망가질 수 있다.
- 컴파일 타임 등에서 객체가 명세가 충족되었는지 알 수 없기 때문에, 많은 유닛 테스트로 해당 객체가 정상적으로 동작할 수 있는지를 계속 체크해야 한다.
좋다, 좋지 않다 보다는 이런 내용이 있다는 걸 알아주시면 좋을 것 같다.