👶 TypeScript

컴패니언 객체 패턴(companion object pattern)

개발자 린다씨 2023. 1. 20. 14:00
반응형

컴패니언 객체 패턴

컴패니언 객체 패턴(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') // ②
  1. Currency를 타입으로 사용
  2. Currency를 값으로 사용

타입과 객체가 의미상 관련되어 있고, 이 객체가 타입을 활용하는 유틸리티 메서드를 제공한다면 컴패니언 객체 패턴을 이용합시다:)

반응형