요약
- 타입스크립트는 런타임에는 덕 타이핑 특성을 가지고, 컴파일에는 구조적 타이핑을 가진다.
- 타입스크립트의 타입 체커는 집합 단위로 체크하기 때문에 중복을 줄일 수 있다.
내용
- 자바스크립트는 덕 타이핑(duck typing)기반이다.
- 어떤 함수의 매개변수값이 모두 제대로 주어진다면, 그 값이 어떻게 만들어졌는지 신경 쓰지 않고 사용한다.
- “만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다.”
- 콘센트나 돼지코냐 “이름”은 중요하지 않다. 꽂을 수 있는가? 꽂을 수 있으면 콘센트라고 부를 수 있다.
- 위 예시에서 봐야하는 건 2가지이다. inTheForest의 함수 선언부, inTheForest의 함수 실행부이다.
- 함수 선언부는 따로 지정된 타입이 없다.
- 함수 실행부는 다른 이름의 두 클래스 객체가 들어간다. 어떤 객체든 들어가지만 내부 실행 조건에 따라서 런타임상에서 오류가 발생한다.
- 이를 통해 유연하게 작성할 수 있어서 생산성을 높일 수 있다.
- 타입스크립트는 구조적 타이핑이다.
- 구조적 타이핑은 구조적 타입 시스템(Structural Type System)이라고 불린다.
- 실제 구조와 정의에 의해 결정되는 타입 시스템의 한 종류이다.
- 명시적 선언이나 이름을 기반으로 하는 명목적 타입 시스템(Nominal Type System)인 Java와는 다르다.
- 런타임에 타입을 체크하는 덕 타이핑과 다르다.
- 명목적 타입 시스템에서는 Vector2D를 사용하도록 의도한 코드이다.
- 구조적 타이핑 언어에서는 Vector2D의 속성에 해당하는 값이 값을 넣는 타입에 속성으로 존재하는가? 로 이해 해야한다.
- 구조적 타이핑은 상속 관계보다는 집합으로 포함한다는 개념을 지향한다.
- 중복되는 범위가 있다면 재사용이 가능하다.
- 덕 타이핑과 구조적 타이핑의 차이
- 덕 타이핑은 런타임에 타입을 체크한다.
- 구조적 타이핑은 타입 시스템 기반에서 컴파일 타임(타입체커)에서 타입을 체크한다.
- 객체의 변수, 메소드 같은 필드를 기반으로 타입을 체크하지만 덕 타이핑은 동적 타이핑에서, 구조적 타이핑은 정적 타이핑에서 쓰인다.
- 덕 타이핑은 다형성 관점에서 주목해야하고, 구조적 타이핑은 타입 체킹 관점이다.
참고