프로그래밍/Typescript

TypeScript의 Never 타입: 이해와 활용

shimdh 2025. 3. 30. 11:45
728x90

TypeScript에서 never 타입은 매우 중요한 개념으로, 특정한 상황에서 사용되는 특별한 타입입니다. 이 타입은 함수가 절대 성공적으로 완료되지 않거나, 결코 값을 반환하지 않을 때 사용됩니다. 즉, 어떤 경우에도 값이 존재할 수 없는 상태를 나타내며, 이는 프로그래밍에서 매우 중요한 역할을 합니다. never 타입을 이해하는 것은 TypeScript의 타입 시스템을 깊이 있게 이해하는 데 필수적입니다.

never 타입의 특징

1. 함수가 종료되지 않음

never는 주로 무한 루프나 에러를 던지는 함수와 같은 상황에서 사용됩니다. 이러한 함수는 정상적인 흐름을 벗어나며, 프로그램의 실행을 중단시키는 역할을 합니다. 예를 들어, 무한 루프를 포함한 함수는 절대 종료되지 않기 때문에 never 타입으로 정의됩니다.

2. 값을 반환하지 않음

never 타입을 가진 함수는 항상 예외를 발생시키거나 프로그램 흐름을 중단시킵니다. 이는 개발자가 해당 함수가 호출된 후에는 절대 정상적인 값을 받을 수 없음을 명확히 알 수 있게 해줍니다. 따라서 이러한 함수는 예외적인 상황을 처리하는 데 유용합니다.

3. 타입 안전성 강화

never 타입은 코드의 예상치 못한 동작을 방지하는 데 도움을 줍니다. 이를 통해 개발자는 코드의 안정성을 높이고, 잘못된 입력이나 예외 상황에 대한 처리를 보다 명확하게 할 수 있습니다. 이로 인해 코드의 가독성과 유지보수성이 향상됩니다.

실제 예제

예외 처리 함수

function throwError(message: string): never {
    throw new Error(message);
}

// 호출 예시
throwError("문제가 발생했습니다!");

위의 예제에서는 throwError라는 함수가 있습니다. 이 함수는 문자열 메시지를 받아서 오류를 던집니다. 따라서 이 함수를 호출하면 프로그램이 정상적으로 실행될 수 없으므로 리턴 값이 없습니다. 이는 개발자가 오류 발생 시 즉시 문제를 인지하고 대처할 수 있도록 돕습니다.

무한 루프

function infiniteLoop(): never {
    while (true) {
        console.log("끝나지 않는 루프");
    }
}

// 호출 예시
infiniteLoop();

여기서는 무한 루프를 생성하는 infiniteLoop라는 함수를 정의했습니다. 이 함수는 끝없이 반복되며 결코 종료되지 않습니다. 이러한 함수는 특정한 조건이 충족될 때까지 계속 실행되어야 하는 경우에 유용하게 사용될 수 있습니다.

switch 문과 exhaustive checking

TypeScript에서는 switch 문에서 모든 케이스에 대한 처리를 강제할 수 있습니다:

type Shape = "circle" | "square";

function getArea(shape: Shape): number | never {
    switch (shape) {
        case "circle":
            return Math.PI * 10 * 10; // 원의 면적 계산
        case "square":
            return 10 * 10; // 정사각형 면적 계산
        default:
            const _exhaustiveCheck: never = shape;
            throw new Error(`알 수 없는 도형입니다: ${shape}`);
    }
}

// 호출 예시 
console.log(getArea("circle")); // 결과: 면적 출력
// console.log(getArea("triangle")); // 오류 발생! 알 수 없는 도형입니다.

위 코드에서는 다양한 도형에 따라 면적을 계산하는 함수를 만들었습니다. 만약 지원하지 않는 도형이 들어오면 컴파일 타임에 오류가 발생하게 되어, 잘못된 입력으로 인한 문제를 예방합니다. 이는 개발자가 코드의 모든 경로를 명확히 이해하고, 예외적인 상황에 대한 처리를 강화하는 데 기여합니다.

요약

  • never 타입은 절대로 값이 존재하지 않는 경우에 사용되며, 주로 에러 처리 및 무한 루프와 관련된 기능에서 활용됩니다. 이를 통해 코드의 안전성을 높이고 의도치 않은 버그를 방지할 수 있습니다.
  • 적절히 사용하는 방법을 이해하면 TypeScript 코드를 더 견고하고 유지보수하기 쉽게 만들어줍니다. never 타입은 개발자가 코드의 흐름을 명확히 이해하고, 예외적인 상황에 대한 처리를 보다 효과적으로 할 수 있도록 돕는 중요한 도구입니다.
728x90