[typescript] 타입 가드를 사용한 불변성 유지
데이터의 불변성을 유지하는 것은 프로그래밍에서 중요한 원칙 중 하나입니다. 타입스크립트를 사용하면 타입 시스템을 통해 데이터의 불변성을 보다 쉽게 유지할 수 있습니다. 하지만 때때로 복잡한 데이터 구조에서 불변성을 유지하기 위해서는 조금 더 다른 방법이 필요합니다. 이때 타입 가드를 사용하면 유용합니다.
타입 가드란?
타입 가드는 타입스크립트에서 변수의 타입을 제한하는데 사용됩니다. 주로 유니온 타입이나 타입스크립트에서 타입을 추론할 수 없는 경우에 사용됩니다.
예를 들어, 다음과 같은 유니온 타입을 가진 변수가 있다고 가정해봅시다.
type Foo = { type: 'A', value: number } | { type: 'B', value: string };
let data: Foo = { type: 'A', value: 100 };
이 상황에서 data
의 type
필드에 따라 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
의 타입이 더 구체적으로 결정되어 불변성을 유지하면서 안전하게 작업할 수 있습니다.
타입 가드를 통해 타입스크립트 코드에서 더욱 안전하고 확실한 불변성을 유지할 수 있습니다.
참고 문헌:
- https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards