[typescript] 타입 가드를 사용한 불변성 유지

데이터의 불변성을 유지하는 것은 프로그래밍에서 중요한 원칙 중 하나입니다. 타입스크립트를 사용하면 타입 시스템을 통해 데이터의 불변성을 보다 쉽게 유지할 수 있습니다. 하지만 때때로 복잡한 데이터 구조에서 불변성을 유지하기 위해서는 조금 더 다른 방법이 필요합니다. 이때 타입 가드를 사용하면 유용합니다.

타입 가드란?

타입 가드는 타입스크립트에서 변수의 타입을 제한하는데 사용됩니다. 주로 유니온 타입이나 타입스크립트에서 타입을 추론할 수 없는 경우에 사용됩니다.

예를 들어, 다음과 같은 유니온 타입을 가진 변수가 있다고 가정해봅시다.

type Foo = { type: 'A', value: number } | { type: 'B', value: string };
let data: Foo = { type: 'A', value: 100 };

이 상황에서 datatype 필드에 따라 value의 타입이 결정됩니다. 이때 타입 가드를 사용하면 다음과 같이 작성할 수 있습니다.

function isTypeA(foo: Foo): foo is { type: 'A' } {
  return foo.type === 'A';
}

위의 isTypeA 함수는 type이 ‘A’인 경우에만 true를 반환합니다. 이를 통해 Foo 타입을 더 구체적으로 좁힐 수 있게 됩니다.

불변성 유지

이제 위에서 정의한 isTypeA 타입 가드를 사용하여 불변성을 유지하는 예제를 살펴보겠습니다.

function processFoo(foo: Foo) {
  if (isTypeA(foo)) {
    // 여기서 foo는 { type: 'A', value: number } 타입으로 좁혀짐
    console.log(foo.value * 2);
  } else {
    // 여기서 foo는 { type: 'B', value: string } 타입으로 좁혀짐
    console.log(foo.value.toUpperCase());
  }
}

위의 예제에서 processFoo 함수는 isTypeA 타입 가드를 사용하여 foo의 타입을 좁혀냅니다. 이를 통해 각각의 분기에서 foo의 타입이 더 구체적으로 결정되어 불변성을 유지하면서 안전하게 작업할 수 있습니다.

타입 가드를 통해 타입스크립트 코드에서 더욱 안전하고 확실한 불변성을 유지할 수 있습니다.

참고 문헌: