[typescript] 타입스크립트에서의 구조적 타이핑과 명시적 타이핑의 차이
구조적 타이핑
구조적 타이핑은 타입스크립트에서 객체의 형태가 호환 가능한지를 판단하는 방식입니다. 즉, 객체의 구조가 일치하면, 두 객체는 호환 가능하다고 간주됩니다. 이는 객체가 명시적으로 같은 타입으로 선언되지 않더라도 해당 객체의 구조가 호환되는 경우에는 서로 할당할 수 있습니다.
예를 들어, 다음과 같이 두 개의 인터페이스가 정의되어 있다고 가정해봅시다.
interface Person {
name: string;
age: number;
}
interface Employee {
name: string;
age: number;
salary: number;
}
위의 경우 [Employee]
객체는 [Person]
타입으로 할당할 수 있습니다. 이는 구조적 타이핑 덕분에 가능한 것이며, 객체의 형태가 중요한 상황에서 유용하게 사용될 수 있습니다.
명시적 타이핑
명시적 타이핑은 객체 타입을 명확하게 선언하는 방식입니다. 위의 예시에서처럼, [Employee]
객체를 [Person]
타입으로 선언할 때 구조적 타이핑이 적용되지 않도록 명시적으로 타입을 지정하여 객체 타입을 구체적으로 명시할 수 있습니다.
명시적 타이핑을 사용하면 코드의 가독성을 높이고 명확한 코드를 작성하는 데 도움이 됩니다.
예시 코드
// 구조적 타입 호환
let person: Person = { name: "John", age: 30 };
let employee: Employee = person; // 가능
// 명시적 타입 선언
let employee: Employee = { name: "Jane", age : 25, salary: 50000 };
let person: Person = employee; // 에러 발생
결론
구조적 타이핑은 객체의 형태가 호환 가능한지 판단하며, 명시적 타이핑은 객체의 타입을 명시적으로 선언하는 것입니다. 두 가지 방식 모두 장단점이 있으며, 상황에 맞게 적절히 사용해야 합니다.
참고 자료
- TypeScript Handbook: Type Compatibility