TypeScript는 JavaScript의 동적 특성을 유지하면서도 타입 안정성을 확보하는 강력한 타입 시스템을 제공합니다.
그중에서도 TypeScript의 타입 검사는 **덕 타이핑(Duck Typing)**과 구조적 타이핑(Structural Typing) 개념을 기반으로 동작합니다.
또한, TypeScript에서는 **잉여 속성 검사(Excess Property Checking)**라는 추가적인 검사를 수행하여 예상치 못한 속성을 방지할 수도 있습니다.
이 글에서는 덕 타이핑 vs 구조적 타이핑 차이점, 잉여 속성 검사 원리, 그리고 실제 코드 적용 방법을 정리하겠습니다. 🚀
"오리가 오리처럼 걷고, 오리처럼 소리 낸다면, 그것은 오리다."
덕 타이핑(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); // 나는 오리를 흉내 내고 있어!
📌 핵심 포인트
makeSound()
함수는 Quackable
인터페이스를 따르는 객체를 받음Duck
과 Person
클래스는 Quackable
을 명시적으로 구현하지 않았지만, quack()
메서드를 가지고 있기 때문에 타입이 맞다고 인정됨