[typescript] 타입 가드를 사용한 상속 관계의 세분화

TypeScript는 JavaScript에 정적 유형을 도입하여 개발자들이 더 안전하고 구조화된 코드를 작성할 수 있도록 도와줍니다. 이 글에서는 TypeScript에서 관련된 객체를 보다 세분화하기 위해 타입 가드(type guard)상속 관계(inheritance)를 함께 사용하는 방법에 대해 알아보겠습니다.

상속과 타입 가드의 결합

TypeScript에서의 상속 관계는 코드를 구조화하고 재사용성을 높이는 데 유용합니다. 그리고 타입 가드는 런타임에 객체의 유형을 검사하여 코드를 더 안전하게 만드는 데 도움이 됩니다. 이 두 가지를 결합하여, TypeScript 코드베이스 내에서 객체의 상속 관계를 보다 정확하게 다룰 수 있습니다.

아래에 간단한 예제를 통해 이를 살펴보겠습니다.

class Animal {
    name: string = "";
}

class Dog extends Animal {
    breed: string = "";
}

class Cat extends Animal {
    color: string = "";
}

function isDog(animal: Animal): animal is Dog {
    return (animal as Dog).breed !== undefined;
}

function printAnimalDetails(animal: Animal) {
    console.log(animal.name);
    if (isDog(animal)) {
        console.log(animal.breed);
    } else {
        console.log((animal as Cat).color);
    }
}

let dog = new Dog();
dog.name = "Buddy";
dog.breed = "Labrador";

let cat = new Cat();
cat.name = "Whiskers";
cat.color = "Gray";

printAnimalDetails(dog); // Buddy, Labrador
printAnimalDetails(cat); // Whiskers, Gray

위의 예제에서 isDog 함수는 animalDog인지를 확인하여 불리언을 반환합니다. 그리고 printAnimalDetails 함수에서는 이를 활용하여 특정 유형의 객체에 따라 다른 동작을 수행합니다.

결론

TypeScript에서 상속 관계를 다뤄야 하는 상황에서, 타입 가드를 통해 상속된 클래스의 객체를 보다 정확하게 다룰 수 있습니다. 이를 통해 코드의 안정성과 가독성을 높일 수 있습니다.

이상으로 TypeScript를 사용하여 타입 가드를 통해 상속 관계를 세분화하는 방법에 대해 알아보았습니다. 감사합니다.

참고 자료

  1. TypeScript 공식 문서