프로그래밍/Typescript

타입 가드와 타입 보호: TypeScript에서 코드 안전성을 높이는 방법

shimdh 2025. 4. 4. 09:33
728x90

타입스크립트(TypeScript)는 자바스크립트의 상위 집합으로, 정적 타입을 지원하여 코드의 안전성을 높이는 데 큰 도움을 줍니다. 그 중에서도 타입 가드타입 보호는 코드의 안정성을 강화하는 데 필수적인 요소입니다. 이번 포스트에서는 이 두 개념을 깊이 있게 살펴보고, 이를 통해 어떻게 코드의 품질을 높일 수 있는지에 대해 논의하겠습니다.

타입 가드란?

타입 가드는 특정 조건에 따라 변수의 타입을 좁히는 기법입니다. 주로 typeof, instanceof 또는 사용자 정의 함수를 통해 구현됩니다. 타입 가드를 사용하면 TypeScript에게 변수가 어떤 특정한 타입인지 명확하게 알려줄 수 있어, 코드의 가독성과 안전성을 동시에 향상시킬 수 있습니다.

예제: 기본 타입 가드

function printLength(input: string | number) {
    if (typeof input === 'string') {
        console.log(`문자열 길이: ${input.length}`);
    } else {
        console.log(`숫자의 길이는 계산할 수 없습니다.`);
    }
}

printLength("안녕하세요"); // 문자열 길이: 5
printLength(12345); // 숫자의 길이는 계산할 수 없습니다.

위의 예제에서 typeof 연산자를 사용하여 입력값이 문자열인지 확인하고, 그에 따라 다른 동작을 수행합니다. 이처럼 타입 가드는 코드의 흐름을 명확하게 하고, 각 타입에 맞는 처리를 가능하게 합니다.

사용자 정의 타입 가드

사용자 정의 타입 가드는 개발자가 직접 만든 함수를 통해 특정 조건을 만족하는 경우 해당 변수가 어떤 타입인지 명확하게 지정할 수 있게 해줍니다. 이 함수는 항상 boolean 값을 반환하며, 반환 값과 함께 parameter is Type 구문으로 원하는 타입을 명시해야 합니다.

예제: 사용자 정의 타입 가드

interface Cat {
    meow(): void;
}

interface Dog {
    bark(): void;
}

function isCat(animal: Cat | Dog): animal is Cat {
    return (animal as Cat).meow !== undefined;
}

const pet: Cat | Dog = { meow() { console.log("야옹!"); } };

if (isCat(pet)) {
    pet.meow(); // "야옹!"
} else {
    pet.bark(); // 호출되지 않음
}

여기서 isCat 함수는 인자로 받은 동물이 고양이인지 판단하는 역할을 하며, 이를 통해 이후 코드에서 안전하게 메서드를 호출할 수 있습니다. 이러한 사용자 정의 타입 가드는 코드의 유연성을 높이고, 다양한 상황에 맞춰 타입을 안전하게 처리할 수 있도록 도와줍니다.

타입 보호

타입 보호는 조건부 논리를 통해 변수의 타입을 더욱 엄격하게 제한하는 과정을 의미합니다. 이는 주로 제어 구조(if 문 등)를 활용하여 이루어지며, 이를 통해 런타임 시점에서 변수의 상태를 보다 철저하게 검사할 수 있습니다.

예제: 타입 보호

function processValue(value: string | null) {
    if (value !== null) { // null 체크를 통한 보호
        console.log(value.toUpperCase()); 
    } else {
        console.log("값이 없습니다.");
    }
}

processValue("hello"); // HELLO
processValue(null); // 값이 없습니다.

위 예제에서는 null 여부를 검사함으로써 안전하게 문자열 메서드를 사용할 수 있도록 보장합니다. 이러한 타입 보호 기법은 코드의 안정성을 높이고, 예기치 않은 오류를 예방하는 데 큰 도움이 됩니다.

정리

  • 타입 가드사용자 정의 타입 가드를 활용하면 여러 데이터 유형 간의 처리 로직을 세분화할 수 있어, 더 안전하고 명확한 코드를 작성할 수 있습니다.
  • 타입 보호는 조건부 논리를 통해 런타임 시점에서 보다 엄격한 검사를 가능하게 하여, 예상치 못한 오류를 예방하는 데 기여합니다.

TypeScript에서는 이러한 기능들을 적극적으로 활용하여 보다 안정적이고 유지보수하기 쉬운 코드를 작성할 수 있으므로, 개발자들은 이러한 기법들을 잘 이해하고 활용하는 것이 중요합니다. 이를 통해 코드의 품질을 높이고, 팀원 간의 협업을 원활하게 할 수 있습니다.

728x90