[1장 - 아이템 3]
- 타입 관련 코드는 런타임과 무관하다 → 따라서 런타임 중에는 타입 체크가 이루어지지 않으며 런타임 성능에 타입이 영향을 주지도 않는다. (대신 빌드 타임에 대한 오버헤드는 있을 수 있다)
- 런타임 중에도 타입 검사하는 방법은 다음과 같다:
(1) 속성 검사: 타입의 내부 속성을 통해 타입을 검사함 (eg. 'name' in person)
(2) 태그된 유니온: 타입의 속성에 타입의 정보를 표기하는 태그를 추가 (eg. 'type', 'kind')
(3) 클래스 사용: 클래스는 타입과 값 모두로 사용 가능
[1장 - 아이템 4]
- 자바스크립트는 덕 타이핑을 기반으로 한다. 덕 타이핑(Duck typing)은 객체가 특정 타입에 해당하는 변수 및 메소드를 포함하고 있으면 해당 타입이라고 간주하는 방식을 의미한다. 아래 사진과 같이, 실제로는 콘센트가 아니지만 구멍이 두 개 있고 플러그를 꽂을 수 있기 때문에 자바스크립트는 돼지 코를 콘센트라고 간주할 것이다.
- 타입스크립트 역시 해당 방식을 모델링한다. 예를 들어서 타입 A와 그를 확장한 타입 B, 그리고 A를 처리하는 함수가 있다고 가정해보자. 타입 A의 구조와 호환되는 타입 B는 마찬가지로 해당 함수를 이용할 수 있다. 이를 구조적 타이핑(structural typing)이라고 한다. 구조적 타이핑은 타입을 검사하는 시점에 있어서 런타임에 체크를 수행하는 덕 타이핑과 차이점을 가진다.
- 함수를 작성할 때 호출되는 매개변수가 지정된 타입의 속성만을 가지는 경우, 이러한 타입을 봉인된(sealed), 혹은 정확한(precise) 타입이라고 부른다. 그러나 타입스크립트의 타입은 봉인되어 있지 않다. 물론 타입스크립트는 봉인되어 있을 거라고 가정하지만. 이러한 가정으로 인해 구조적 타이핑이 발생하며 이는 예상치 못한 문제로 이어지기도 한다. 예를 들어서 어떠한 클래스와 동일한 속성을 가진 한 객체가 해당 클래스의 인스턴스라고 오해받을 수 있으며 매개변수의 모든 속성에 대해 어떠한 작업을 수행하는 과정에서 예상치 못한 결과를 마주할 수도 있다. (후자와 같은 경우를 대비하여 for value of Object.values(obj)와 같이 모든 속성에 루프로 접근하는 코드보다는 필요한 속성을 명시적으로 사용하는 코드가 더 바람직하다 eg. obj.x + obj.y)
- 구조적 타이핑이 단점만을 가진 특성은 아니다. 구조적 타이핑은 다음과 같은 장점을 지닌다.
(1) 개발 과정을 편리하게 해 준다.
(2) 유닛 테스트를 작성하기 편리하다 (구조적 타이핑을 통해 외부 요소를 추상화하여 점검할 기능적인 부분과 그 외의 요소를 분리할 수 있다)
(3) 라이브러리 간의 의존성을 분리할 수 있게 해준다.
'독서 > 이펙티브 타입스크립트' 카테고리의 다른 글
[이펙티브 타입스크립트] 2022-02-14 TIL (0) | 2023.02.14 |
---|