다형성(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
클래스를 확장한 Dog
와 Fish
클래스가 있고, performMove
함수는 Animal
타입의 인자를 받아 move
메서드를 호출한다. 이때 performMove
함수에 Dog
나 Fish
객체를 넘기면, 각각의 객체가 자신에 맞는 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에서 이러한 개념을 잘 활용하여 보다 견고한 코드를 작성하는 데 도움이 되길 바란다.
참고문헌: