[typescript] 타입 가드와 가변성 문제의 발생 가능성 및 예방법

타입스크립트는 정적 타입 시스템을 갖춘 프로그래밍 언어로, 변수와 함수에 타입을 명시하여 코드를 안전하게 유지합니다. 하지만, 경우에 따라서 타입 가드를 통해 가변성 문제가 발생할 수 있습니다. 이러한 문제를 방지하면서 타입 안전성을 유지하기 위해 타입 가드를 어떻게 사용할지 알아보겠습니다.

타입 가드란?

타입 가드는 특정 타입으로의 타입 변환을 검사하고, 필요한 경우 해당 구문 블록에서만 해당 타입을 사용할 수 있도록 하는 기법입니다. 다른 말로 하면, 런타임에서 변수의 타입을 체크하여 안전하게 사용할 수 있도록 보장하는 메커니즘입니다.

가변성 문제의 발생 가능성

가변성 문제는 객체의 속성이나 배열 요소의 수정으로 인해 예기치 않은 동작이 발생할 수 있는 상황을 말합니다. 타입스크립트에서는 타입 가드를 사용하지 않으면 코드에 의도치 않은 가변성 문제가 발생할 수 있습니다.

interface Person {
  name: string;
  age: number;
}

function getPersonInfo(person: Person): string {
  if (person.yearOfBirth) {
    return `Name: ${person.name}, Age: ${2022 - person.yearOfBirth}`;
  }
  return `Name: ${person.name}, Age: ${person.age}`;
}

위 코드에서 person 객체에 yearOfBirth 프로퍼티가 없음에도 불구하고 해당 속성을 읽어오려고 하면 런타임 에러가 발생할 수 있습니다.

타입 가드를 사용하여 가변성 문제 방지

타입 가드를 사용하여 가변성 문제를 방지하기 위해서는 다음과 같은 방법을 적용할 수 있습니다.

  1. 타입스크립트의 타입 시스템을 최대한 활용하여 모든 속성을 명시적으로 정의합니다. 이를 통해 컴파일 시점에서 에러를 사전에 방지할 수 있습니다.

  2. 인터페이스나 type 앨리어스를 사용하여 강력한 타입 정의를 통해 타입 가드를 활용합니다.

interface Person {
  name: string;
  age: number;
  yearOfBirth?: number;
}

function getPersonInfo(person: Person): string {
  if (person.yearOfBirth) {
    return `Name: ${person.name}, Age: ${2022 - person.yearOfBirth}`;
  }
  return `Name: ${person.name}, Age: ${person.age}`;
}

위와 같이 person 객체의 yearOfBirth 속성을 선택적 필드로 정의하여 타입 가드를 통해 가변성 문제를 방지할 수 있습니다.

결론

타입 가드는 가변성 문제를 방지하고 코드를 안전하게 유지하는데 중요한 도구입니다. 타입 가드를 통해 타입 안전성을 유지하면서 안정적이고 확장 가능한 코드를 작성할 수 있습니다.


참고:

의역하여 작성하였습니다.