반응형
컴패니언 객체 패턴
컴패니언 객체 패턴(companion object pattern)은 스칼라에서 유래한 기능으로, 같은 이름을 공유하는 객체와 클래스를 쌍으로 연결합니다.
TypeScript에는 타입과 객체를 쌍으로 묶는 비슷한 기능의 비슷한 패턴이 존재하는데 이 역시도 컴패니언 객체 패턴이라 부르기로 하겠습니다.
다음은 컴패니언 객체 패턴의 예입니다.
type Currency = {
unit: 'EUR' | 'GBP' | 'JPY' | 'USD'
value: number
}
let Currency = {
DEFAULT: 'EUR',
from(value: number, unit = Currency.DEFAULT): Currency {
return {unit, value}
}
}
TypeScript에서 타입과 값은 별도의 네임스페이스를 갖는다는 사실을 기억합시다.
같은 영역에서 하나의 이름을 타입과 값 모두에 연결할 수 있습니다.
한편, 컴패니언 객체 패턴을 이용하면 별도의 네임스페이스를 이용해 한 번은 타입으로, 한 번은 값으로 두 번 이름을 선언할 수 있습니다.
이 패턴은 유용한 특성을 제공합니다.
이 패턴을 이용하면 타입과 값 정보를 Currency 같은 한 개의 이름으로 그룹화할 수 있습니다.
또한 호출자는 이 둘을 한 번에 임포트 할 수 있습니다.
import {Currency} from './Currency'
let amountDue: Currency = { // ①
unit: 'JPY',
value: 89833.10
}
let otherAmountDue = Currency.from(220, 'EUR') // ②
- Currency를 타입으로 사용
- Currency를 값으로 사용
타입과 객체가 의미상 관련되어 있고, 이 객체가 타입을 활용하는 유틸리티 메서드를 제공한다면 컴패니언 객체 패턴을 이용합시다:)
반응형
'👶 TypeScript' 카테고리의 다른 글
고급 함수 타입들 - 사용자 정의 타입 안전 장치 (0) | 2023.01.20 |
---|---|
고급 함수 타입들 - 튜플의 타입 추론 개선 (0) | 2023.01.20 |
매핑된 타입(mapped type) (0) | 2023.01.20 |
Record 타입 (0) | 2023.01.20 |
객체 타입의 타입 연산자 - keyof 연산자 (0) | 2023.01.19 |