프로그래밍/Typescript

타입스크립트의 고급 타입: 타입 가드와 차별된 유니온의 이해

shimdh 2025. 4. 1. 09:04
728x90

타입스크립트는 정적 타입 언어로, 개발자가 코드의 안정성을 높이고 오류를 줄일 수 있도록 돕는 다양한 기능을 제공합니다. 그 중에서도 고급 타입은 복잡한 데이터 구조를 정의하고, 다양한 상황에서 안전하게 코드를 작성하는 데 필수적인 도구입니다. 특히, 타입 가드차별된 유니온은 개발자가 서로 다른 타입의 값을 처리할 수 있도록 해주는 중요한 개념입니다. 이번 포스트에서는 이 두 가지 개념을 깊이 있게 살펴보겠습니다.

1. 타입 가드란 무엇인가?

타입 가드는 런타임 시점에 변수의 타입을 확인하여, 해당 변수가 어떤 특정한 형태인지 판단할 수 있도록 해주는 메커니즘입니다. 이는 코드의 안전성을 높이고, 예기치 않은 오류를 줄이는 데 큰 역할을 합니다. 타입 가드를 사용하면, 개발자는 각기 다른 타입에 대해 적절한 처리를 할 수 있어, 코드의 안정성을 더욱 강화할 수 있습니다.

1.1 타입 가드의 예제

아래의 예제를 통해 타입 가드의 사용법을 살펴보겠습니다.

function printValue(value: string | number) {
    if (typeof value === 'string') {
        console.log(`문자열: ${value}`);
    } else {
        console.log(`숫자: ${value}`);
    }
}

printValue("안녕하세요"); // 문자열: 안녕하세요
printValue(42);           // 숫자: 42

위 예제에서 typeof 연산자를 사용하여 value의 실제 유형을 확인합니다. 이를 통해 각기 다른 처리를 할 수 있으며, 개발자는 코드의 흐름을 명확하게 이해할 수 있습니다. 타입 가드를 통해 코드의 안전성을 높이는 것은 특히 대규모 애플리케이션에서 더욱 중요해집니다.

2. 차별된 유니온이란?

차별된 유니온(Discriminated Union)은 여러 가지 인터페이스 또는 객체 리터럴이 공통적인 속성을 가지고 있을 때, 그 속성을 이용해 구분할 수 있는 방법입니다. 이러한 접근 방식은 주로 객체 지향 프로그래밍 패턴에서 많이 사용되며, 코드의 가독성을 높이고, 다양한 타입을 효과적으로 관리할 수 있게 해줍니다.

2.1 차별된 유니온의 예제

아래는 차별된 유니온을 사용하는 간단한 예시입니다.

interface Circle {
    kind: "circle";
    radius: number;
}

interface Square {
    kind: "square";
    sideLength: number;
}

type Shape = Circle | Square;

function area(shape: Shape): number {
    switch (shape.kind) {
        case "circle":
            return Math.PI * shape.radius * shape.radius;
        case "square":
            return shape.sideLength * shape.sideLength;
        default:
            const _exhaustiveCheck: never = shape; // 모든 경우를 체크했음을 보장
            return _exhaustiveCheck; 
    }
}

const myCircle: Circle = { kind: "circle", radius: 10 };
const mySquare: Square = { kind: "square", sideLength: 5 };

console.log(area(myCircle)); // 원의 면적 출력
console.log(area(mySquare));  // 정사각형의 면적 출력

여기서 Shape라는 타입은 두 개의 서로 다른 인터페이스인 CircleSquare를 포함합니다. 각 인터페이스는 공통적으로 kind라는 속성을 가지고 있어 이를 통해 어떤 종류의 도형인지 식별할 수 있습니다. 이러한 구조는 코드의 확장성을 높이며, 새로운 도형이 추가되었을 때도 쉽게 관리할 수 있도록 해줍니다. 또한, 스위치 문 내에서 모든 가능한 경우를 처리하였으므로 TypeScript는 만약 새로운 도형이 추가되었을 때 컴파일 타임에 에러를 발생시켜 개발자가 빠르게 수정하도록 돕습니다.

3. 고급 타입의 장점

고급 타입을 활용하면 다음과 같은 장점을 누릴 수 있습니다.

  • 코드의 안전성 향상: 타입 가드를 통해 런타임 시점에 타입을 확인함으로써 예기치 않은 오류를 줄일 수 있습니다.
  • 가독성 및 유지보수성 증가: 차별된 유니온을 사용하면 코드의 가독성이 높아지고, 다양한 타입을 효과적으로 관리할 수 있습니다.
  • 확장성: 새로운 타입이나 인터페이스를 추가할 때, 기존 코드를 크게 변경하지 않고도 쉽게 확장할 수 있습니다.

요약

  • 타입 가드는 런타임 시점에 변수의 실제 유형을 확인하여 안전하게 다룰 수 있도록 하는 기능입니다. 이를 통해 개발자는 코드의 흐름을 명확하게 이해하고, 오류를 사전에 방지할 수 있습니다.
  • 차별된 유니온은 공통 속성을 가진 여러 인터페이스 또는 객체 리터럴 간에 구분 가능하게 만들어주는 강력한 패턴으로, 코드 유지보수성과 안정성을 향상시킵니다. 이러한 패턴을 통해 개발자는 다양한 데이터 구조를 효과적으로 관리할 수 있습니다.

이러한 고급 타입들을 활용하면 보다 견고하고 오류가 적은 코드를 작성할 수 있으며, 다양한 데이터 구조를 쉽게 다룰 수 있습니다. 이를 통해 개발자는 더욱 효율적이고 안전한 프로그래밍 환경을 구축할 수 있습니다.

728x90