[typescript] 다형성과 타입 가드의 관계

다형성(polymorphism)과 타입 가드(type guard)는 TypeScript의 중요한 개념으로, 코드를 보다 안전하게 작성하고 유지보수하기 쉽도록 돕는다. 이 두 가지 개념은 TypeScript 코드를 작성할 때 유용하게 활용될 수 있으므로, 이를 함께 살펴보고 관련 예시를 통해 그 활용 방법을 알아보도록 하자.

다형성 (Polymorphism)

다형성은 객체 지향 프로그래밍의 한 중요한 특성으로, 객체가 여러 가지 타입을 가질 수 있는 능력을 의미한다. TypeScript에서는 이러한 다형성을 효과적으로 활용할 수 있다. 예를 들어, 같은 메서드를 호출하지만 서로 다른 객체에서 각기 다른 동작을 하는 경우에 유용하다.

class Animal {
  move() {
    console.log("Moving...");
  }
}

class Dog extends Animal {
  move() {
    console.log("Running...");
  }
}

class Fish extends Animal {
  move() {
    console.log("Swimming...");
  }
}

function performMove(animal: Animal) {
  animal.move();
}

let dog = new Dog();
let fish = new Fish();

performMove(dog);  
performMove(fish); 

위의 예시에서 Animal 클래스를 확장한 DogFish 클래스가 있고, performMove 함수는 Animal 타입의 인자를 받아 move 메서드를 호출한다. 이때 performMove 함수에 DogFish 객체를 넘기면, 각각의 객체가 자신에 맞는 move 메서드를 호출하게 된다. 이는 다형성의 한 예시로, TypeScript에서 코드를 보다 유연하게 작성할 수 있는 방법 중 하나이다.

타입 가드 (Type Guard)

타입 가드는 TypeScript에서 동적으로 변하는 값을 정적 타입으로 처리하는 방법이다. 특히, 유니언 타입이나 타입스크립트에서는 타입을 유추할 수 없게 되는 경우에 유용하게 활용된다.

예를 들어, 다음과 같이 typeof를 사용하여 변수의 타입을 체크하는 방법이 있다.

function logMessage(value: string | number) {
  if (typeof value === "string") {
    console.log(value.toUpperCase());
  } else {
    console.log(value.toFixed(2));
  }
}

위의 코드에서 logMessage 함수는 string 또는 number 타입의 매개변수를 받는다. 이때 typeof를 사용하여 변수 value의 타입을 체크하고 분기 처리하여 안전하게 사용할 수 있다.

결론

다형성과 타입 가드는 TypeScript에서 코드를 보다 안전하고 유연하게 작성하고자 할 때 유용하게 활용될 수 있는 개념이다. 이러한 개념을 적절히 활용하여 코드를 작성하면, 에러를 줄이고 유지보수하기 쉬운 안정적인 코드를 작성할 수 있을 것이다. TypeScript에서 이러한 개념을 잘 활용하여 보다 견고한 코드를 작성하는 데 도움이 되길 바란다.

참고문헌: