프로그래밍/Typescript

TypeScript에서의 타입 가드와 타입 보호: 안전한 코드 작성을 위한 필수 기술

shimdh 2025. 4. 7. 08:47
728x90

TypeScript는 정적 타입 언어로, 개발자가 코드의 안정성을 높일 수 있는 다양한 기능을 제공합니다. 그 중에서도 타입 가드타입 보호는 변수가 특정한 타입인지 확인하고, 이를 통해 코드의 안전성을 높이는 중요한 기술입니다. 이번 포스트에서는 이 두 가지 개념을 깊이 있게 살펴보고, 이를 활용하여 더욱 신뢰할 수 있는 코드를 작성하는 방법에 대해 알아보겠습니다.

1. 타입 가드란?

타입 가드는 특정 조건문 내에서 변수의 타입을 좁히기 위해 사용됩니다. 이 기법을 통해 TypeScript 컴파일러는 해당 변수가 어떤 특정한 유형임을 알 수 있도록 도와줍니다. 타입 가드는 코드의 가독성을 높이고, 타입 관련 오류를 사전에 방지하는 데 큰 도움이 됩니다.

예시

function isString(value: any): value is string {
    return typeof value === 'string';
}

function printValue(value: string | number) {
    if (isString(value)) {
        console.log("문자열:", value);
    } else {
        console.log("숫자:", value);
    }
}

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

위 예제에서 isString이라는 사용자 정의 함수는 입력값이 문자열인지 확인합니다. value is string 구문은 TypeScript에게 value가 문자열일 때만 해당 블록 내에서 사용할 수 있음을 알려줍니다. 이를 통해 개발자는 코드의 흐름을 명확하게 이해할 수 있습니다.

2. 사용자 정의 타입 가드

사용자 정의 타입 가드는 위 예제처럼 명시적으로 작성된 함수를 통해 구현됩니다. 이 방법은 복잡한 객체나 여러 조건에 따라 다양한 형태의 데이터 구조를 다룰 때 매우 유용합니다. 사용자 정의 타입 가드를 사용하면, 개발자는 특정 조건에 맞는 타입을 더욱 세밀하게 제어할 수 있습니다.

예시

interface Cat {
    type: "cat";
    meow(): void;
}

interface Dog {
    type: "dog";
    bark(): void;
}

type Animal = Cat | Dog;

function isCat(animal: Animal): animal is Cat {
    return animal.type === "cat";
}

function makeSound(animal: Animal) {
    if (isCat(animal)) {
        animal.meow();
    } else {
        animal.bark();
    }
}

여기서 Animal이라는 합집합 유형이 있으며, 각각 고유의 메서드를 가진 두 가지 인터페이스(Cat, Dog)로 구성되어 있습니다. isCat 함수는 동물이 고양이인지 여부를 판단하여 적절한 메서드를 호출합니다. 이러한 방식은 코드의 유연성을 높이고, 다양한 데이터 타입을 효과적으로 처리할 수 있게 해줍니다.

3. 타입 보호

타입 보호는 변수 또는 속성이 특정 조건을 만족할 때만 접근할 수 있게 하는 기법으로, 주로 조건부 문이나 논리적 연산자를 사용하여 이루어집니다. 이를 통해 개발자는 코드의 안전성을 더욱 강화할 수 있습니다.

예시

function example(value?: string) {
   if (value) { 
       console.log(value.toUpperCase()); // 여기서는 value가 undefined가 아님.
   } else { 
       console.log("값이 없습니다."); // 여기서는 value가 undefined입니다.
   }
}

위 코드는 선택적 매개변수인 value를 받아옵니다. 첫 번째 블록에서는 value가 존재하는 경우에만 대문자로 변환하여 출력하고, 그렇지 않으면 다른 메시지를 출력합니다. 이러한 방식은 코드의 흐름을 명확히 하고, 예기치 않은 오류를 방지하는 데 기여합니다.

요약

  • 타입 가드는 런타임 시점에서 변수의 정확한 타입을 판별하기 위한 방법이며, 이를 통해 코드의 안정성을 높일 수 있습니다.
  • 사용자 정의 타입 가드는 이를 더욱 세밀하게 제어할 수 있는 기능으로, 복잡한 데이터 구조를 다룰 때 유용합니다.
  • 타입 보호는 코드 블록 내에서 안전하게 값을 처리하도록 보장해 주며, 개발자가 의도한 대로 코드가 작동하도록 돕습니다.
728x90