TypeScript는 JavaScript의 동적 특성을 유지하면서도 타입 안정성을 확보하는 강력한 타입 시스템을 제공합니다.

그중에서도 TypeScript의 타입 검사는 **덕 타이핑(Duck Typing)**과 구조적 타이핑(Structural Typing) 개념을 기반으로 동작합니다.

또한, TypeScript에서는 **잉여 속성 검사(Excess Property Checking)**라는 추가적인 검사를 수행하여 예상치 못한 속성을 방지할 수도 있습니다.

이 글에서는 덕 타이핑 vs 구조적 타이핑 차이점, 잉여 속성 검사 원리, 그리고 실제 코드 적용 방법을 정리하겠습니다. 🚀


덕 타이핑(Duck Typing)

"오리가 오리처럼 걷고, 오리처럼 소리 낸다면, 그것은 오리다."

덕 타이핑(Duck Typing)은 객체가 특정 속성과 메서드를 가지고 있다면, 해당 타입으로 간주하는 방식입니다.

즉, 명시적으로 인터페이스를 구현하지 않아도, 필요한 속성을 갖고 있으면 타입이 맞다고 판단합니다.

덕 타이핑 예제

interface Quackable {
  quack(): void;
}

class Duck {
  quack() {
    console.log("꽥꽥!");
  }
}

class Person {
  quack() {
    console.log("나는 오리를 흉내 내고 있어!");
  }
}

function makeSound(duck: Quackable) {
  duck.quack();
}

const realDuck = new Duck();
const fakeDuck = new Person();

makeSound(realDuck); // 꽥꽥!
makeSound(fakeDuck); // 나는 오리를 흉내 내고 있어!

📌 핵심 포인트