프로그래밍/Typescript

타입스크립트에서의 오류 처리: null 및 undefined 안전하게 다루기

shimdh 2025. 4. 6. 11:02
728x90

타입스크립트는 정적 타입 언어로, 코드의 안정성과 신뢰성을 높이는 데 큰 도움을 줍니다. 그러나 nullundefined와 같은 값들은 자주 발생하는 문제로, 이를 적절히 관리하지 않으면 예기치 않은 런타임 오류가 발생할 수 있습니다. 이번 포스트에서는 타입스크립트에서 오류를 처리하고 nullundefined를 안전하게 다루는 방법에 대해 자세히 알아보겠습니다.

1. 기본 개념

오류 처리란?

오류 처리는 프로그램 실행 중 발생할 수 있는 다양한 오류를 관리하는 과정입니다. 일반적으로 try-catch 문을 사용하여 예외 상황을 포착하고 적절한 조치를 취합니다. 오류 처리는 단순히 오류를 잡는 것에 그치지 않고, 사용자에게 친절한 메시지를 제공하거나 시스템의 안정성을 유지하기 위한 다양한 방법을 포함합니다.

null과 undefined의 정의

  • null: 의도적으로 값이 없음을 나타내는 데이터 타입입니다. 이는 개발자가 명시적으로 "여기에 아무것도 없다"라고 설정한 상태로, 데이터베이스나 API 호출에서 값이 없음을 나타내는 데 자주 사용됩니다.
  • undefined: 변수가 선언되었지만 초기화되지 않았거나 존재하지 않는 속성에 접근할 때 반환되는 값입니다. 이는 자주 발생할 수 있는 상황으로, 변수가 정의되지 않았거나 값이 할당되지 않은 상태를 나타냅니다.

2. null과 undefined의 차이점

정의의 차이

  • null: 개발자가 명시적으로 "여기에 아무것도 없다"라고 설정한 상태로, 이는 의도적인 결정을 반영합니다.
  • undefined: 변수나 속성이 아직 정의되지 않았거나 값이 할당되지 않은 상태로, 이는 프로그래밍 과정에서 발생할 수 있는 실수나 누락을 나타냅니다.

예를 들어:

let a: number | null = null; // 명시적으로 '없음'으로 설정
let b: number | undefined; // 초기화 되지 않아 '정의되지 않음'

3. 오류 처리 방법

타입스크립트에서 오류 처리를 위해 주로 사용하는 구조는 다음과 같습니다:

1. try-catch 문

function divide(a: number, b: number): number {
    try {
        if (b === 0) throw new Error("0으로 나눌 수 없습니다.");
        return a / b;
    } catch (error) {
        console.error(error.message);
        return NaN; // 실패 시 NaN 반환
    }
}

console.log(divide(10, 0)); // "0으로 나눌 수 없습니다."

이 구조는 코드의 특정 부분에서 발생할 수 있는 오류를 사전에 방지하고, 오류 발생 시 적절한 대처를 가능하게 합니다.

2. Optional Chaining (?.)

Optional chaining은 객체의 깊은 속성에 접근할 때, 해당 속성이 존재하지 않을 경우 에러 없이 undefined를 반환하도록 도와줍니다. 이는 복잡한 객체 구조를 다룰 때 유용하며, 코드의 가독성을 높이는 데 기여합니다.

interface User {
    name?: string;
    age?: number;
}

const user: User = { name: "Alice" };

console.log(user.age?.toString()); // undefined (age가 없으므로)

3. Nullish Coalescing Operator (??)

이 연산자는 좌측 피연산자가 null 또는 undefined일 때만 우측 피연산자를 반환합니다. 이를 통해 기본값을 설정할 수 있어, 코드의 안정성을 높이는 데 기여합니다.

let username = null;
let defaultName = "Guest";

let displayName = username ?? defaultName; 

console.log(displayName); // "Guest"

4. 사용자 정의 타입 가드

사용자 정의 타입 가드는 특정 조건을 통해 변수가 어떤 타입인지 확인하는 기능을 제공합니다. 이를 통해 코드의 안전성을 높이고, 타입스크립트의 강력한 타입 시스템을 활용할 수 있습니다.

function isNonNull<T>(value: T | null): value is T {
    return value !== null;
}

const data: string | null = getData(); 

if (isNonNull(data)) {
    console.log(data.toUpperCase()); // data가 non-null일 경우 호출 가능 
} else {
    console.warn("데이터가 없습니다."); 
}

결론

타입스크립트에서 올바른 오류 처리와 함께 null, undefined 값을 안전하게 다루는 것은 매우 중요합니다. 이러한 기술들을 활용하면 코드를 더 견고하고 유지 보수하기 쉬운 형태로 만들 수 있습니다. 위에서 소개한 기법들을 바탕으로 실제 프로젝트에서도 적극 활용해 보세요! 이를 통해 코드의 품질을 높이고, 예기치 않은 오류로부터 시스템을 보호할 수 있습니다.

728x90