본문으로 건너뛰기

구조적 타이핑 (Structural Typing)

질문

TypeScript의 구조적 타이핑(Structural Typing)이란 무엇인가요?

답변 초안

TypeScript는 구조적 타이핑(Structural Typing) 을 사용합니다.

구조적 타이핑은 타입의 이름이 아니라 객체가 가진 속성과 형태(Structure) 를 기준으로 타입 호환성을 판단하는 방식입니다.

따라서 타입 이름이 다르더라도 동일한 구조를 가지고 있다면 서로 할당이 가능합니다.

예시

interface User {
name: string;
age: number;
}

interface Person {
name: string;
age: number;
}

const user: User = {
name: 'Kim',
age: 25,
};

const person: Person = user; // 가능

UserPerson은 서로 다른 타입이지만 동일한 프로퍼티 구조를 가지고 있기 때문에 할당할 수 있습니다.

TypeScript는 타입 이름보다 객체의 형태를 중요하게 판단합니다.

왜 사용하는가?

JavaScript는 객체를 자유롭게 생성하고 전달하는 언어입니다.

function printName(user: { name: string }) {
console.log(user.name);
}

const user = {
name: 'Kim',
age: 25,
address: 'Seoul',
};

printName(user); // 가능

함수는 name만 필요하지만 객체는 더 많은 속성을 가질 수 있습니다.

구조적 타이핑 덕분에 필요한 속성만 만족하면 객체를 유연하게 사용할 수 있으며, JavaScript의 개발 방식과도 잘 어울립니다.

실무 주의점

  • 구조가 같으면 타입 이름이 달라도 호환되므로 의도하지 않은 할당이 발생할 수 있습니다.
  • 객체 리터럴을 직접 전달할 때는 초과 프로퍼티 검사(Excess Property Check)가 동작합니다.
  • React Props나 함수 인자 타입 설계에서 자주 활용됩니다.

면접 답변

"TypeScript는 구조적 타이핑을 사용하기 때문에 타입의 이름이 아니라 객체의 프로퍼티 구조를 기준으로 타입 호환성을 판단합니다. 따라서 서로 다른 인터페이스라도 동일한 구조를 가지고 있다면 할당이 가능합니다. 이는 JavaScript의 유연한 객체 사용 방식을 타입 시스템에 자연스럽게 반영한 설계라고 이해하고 있습니다."