[typescript] 타입 가드를 사용한 리팩토링 기법

타입스크립트는 타입 가드 (Type Guard) 기능을 통해 코드를 개선하고 리팩토링하는 데 도움을 줍니다. 타입 가드는 특정 조건을 충족할 때 타입을 좁혀나가는 방식으로 작동합니다. 이를 통해 코드의 안정성과 가독성을 향상시킬 수 있습니다.

타입 가드의 개념

타입 가드는 런타임에서 변수의 타입을 체크하고, 해당 변수를 사용할 때 컴파일러에게 명시적으로 타입을 알려주는 역할을 합니다. 주로 typeof, instanceof, in 연산자와 사용자 정의 함수를 활용하여 구현됩니다.

아래는 typeof 연산자를 사용한 간단한 타입 가드의 예시입니다.

function logValue(x: string | number) {
  if (typeof x === 'string') {
    console.log(x.toUpperCase());
  } else {
    console.log(x.toFixed(2));
  }
}

위 함수에는 x라는 매개변수가 string 또는 number 타입일 수 있다는 것이 명시되어 있습니다. 이후 typeof 연산자를 통해 xstring 타입인지를 체크한 후에 해당 타입에 맞는 메소드를 호출하여 안전하게 사용할 수 있습니다.

타입 가드를 활용한 리팩토링

타입 가드를 사용하여 코드를 리팩토링하면 타입 안정성을 강화하면서 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 예를 들어, 객체의 프로퍼티에 접근할 때 if 구문을 활용하여 타입을 좁혀나가는 식으로 코드를 작성할 수 있습니다.

아래는 타입 가드를 활용한 주요 리팩토링 사례 중 하나입니다.

interface Square {
  kind: 'square';
  size: number;
}

interface Rectangle {
  kind: 'rectangle';
  width: number;
  height: number;
}

type Shape = Square | Rectangle;

function area(shape: Shape) {
  if (shape.kind === 'square') {
    return shape.size * shape.size;
  } else {
    return shape.width * shape.height;
  }
}

위 예시에서 area 함수는 Shape 타입을 받아들이며, if 구문을 사용하여 shape 객체의 kind 프로퍼티로 타입을 판별하고 있습니다. 이를 통해 각 도형에 맞게 올바른 연산을 수행하고 있습니다.

마치며

타입 가드를 활용한 코드 리팩토링은 타입스크립트의 강력한 기능 중 하나입니다. 타입 가드를 적절히 활용하면 타입 안정성을 높이고 코드의 가독성을 향상시킬 수 있습니다. 코드의 유지보수성을 높이고 안정성을 확보하기 위해 타입 가드를 적극적으로 활용해보세요.

참고: 타입스크립트 핸드북 - 타입 가드