Structural SubTyping (구조적 서브타이핑)
- 구조적 타입시스템이라고도 불린다.
- 실제 구조와 정의에 의해 결정되는 타입시스템의 한 종류이다.
- 명시적 선언이나 이름을 기반으로 하는 명목적 타입시스템(Nominal Type System)과 다르고
- 런타임에 타입을 체크하는 덕타이핑과 다르다.
interface Obj1 {
x:number;
y:number;
}
interface Obj2 {
x:number;
y:number;
name:string;
}
const someFun(arg:Obj1){
return console.log(arg.x, arg.y);
}
const someVal:Obj2 = { x:1, y:1, name: 'hi' };
someFun(someVal);
- Obj1 에 해당하는 값이 값을 넣는 타입에 속성으로 존재하는가.
- 즉, 같은 속성의 타입이 있는지를 체크하기 때문에 위의 두 인터페이스는 호환된다.
- 그러므로 중복되는 범위가 있다면 재사용가능하고, 생산성 있는 코드를 쉽게 생산가능하다.
- 단점으로는 의도하지 않았지만 동일한 타입을 갖는 경우 의도치 않게 동일 유형으로 간주해버린다.
- 덕타이핑은 런타임에 타입 체크함
- 구조적 타이핑은 타입 시스템 기반에서 컴파일타입 (혹은 타입체커)에서 타입 체크함
- 둘다 객체의 변수, 메서드같은 필드 기반으로 타입을 체크하지만 덕타이핑은 동적타이핑에서, 구조적타이핑은 정적타이핑에서 쓰임
- 덕타이핑은 다형성 관점에서 주목해야하고, 구조적 타이핑은 타입체킹 관점이다.