프로그래밍/Typescript

TypeScript의 `strictNullChecks` 옵션: 안전한 코드 작성을 위한 필수 도구

shimdh 2025. 4. 10. 08:50
728x90

TypeScript는 JavaScript의 상위 집합으로, 정적 타입을 지원하여 개발자가 보다 안전하고 예측 가능한 코드를 작성할 수 있도록 돕습니다. 그 중에서도 strictNullChecks 옵션은 코드에서 nullundefined를 보다 엄격하게 처리하도록 강제하는 중요한 기능입니다. 이 블로그 포스트에서는 strictNullChecks 옵션의 기본 개념, 사용 예시, 유용한 패턴, 그리고 결론을 다루어 보겠습니다.

1. 기본 개념

1.1 기본 동작

TypeScript는 기본적으로 모든 타입이 null 또는 undefined 값을 가질 수 있다고 가정합니다. 이는 변수가 특정 타입으로 선언되었더라도, 그 값이 언제든지 null이나 undefined일 수 있음을 의미합니다. 이러한 유연성은 때로는 유용할 수 있지만, 코드의 안정성을 해칠 위험이 있습니다.

1.2 활성화 후 변화

strictNullChecks 옵션을 활성화하면 각 변수와 매개변수에 대한 nullability가 명확해집니다. 개발자는 어떤 값이 반드시 있어야 하는지를 정의할 수 있으며, 이를 통해 런타임 오류를 줄일 수 있습니다. 예를 들어, 특정 함수가 반드시 문자열을 반환해야 한다면, 이 옵션을 활성화하여 이 조건을 강제할 수 있습니다.

2. 사용 예시

2.1 strictNullChecks 비활성화 시

let name: string;
name = null; // 에러 없음

위의 코드에서는 변수를 문자열로 선언했지만, null 값을 할당할 수 있는 문제가 발생합니다. 이는 코드의 의도를 명확히 하지 못하고, 나중에 예기치 않은 오류를 초래할 수 있습니다.

2.2 strictNullChecks 활성화 시

// tsconfig.json 파일에서 설정
{
  "compilerOptions": {
    "strictNullChecks": true
  }
}

// 코드 예시
let name: string;
name = null; // 에러 발생! 'null' 형식은 'string' 형식에 할당할 수 없습니다.

이 경우 TypeScript가 경고를 주어 의도하지 않은 오류를 방지합니다. 개발자는 코드 작성 시 더 많은 주의를 기울이게 되며, 이는 결과적으로 코드의 품질을 높이는 데 기여합니다.

3. 유용한 패턴

3.1 선택적 체인과 널 병합 연산자 사용하기

TypeScript에서 제공하는 선택적 체인(?.)과 널 병합 연산자(??)를 활용하여 안전하게 값을 처리할 수 있습니다. 이러한 기능은 특히 객체의 속성이 선택적일 때 유용합니다.

interface User {
    id: number;
    name?: string; // 선택적 속성
}

function getUserName(user: User): string {
    return user.name ?? "Anonymous"; // 이름이 없으면 "Anonymous" 반환
}

여기서 만약 사용자 객체에 이름이 없다면 "Anonymous"라는 기본값을 사용할 것입니다. 이는 코드의 가독성을 높이고, 예외 처리를 간소화하는 데 도움을 줍니다.

3.2 함수 인자로 nullable 타입 사용하기

함수의 매개변수에서도 nullable 타입을 명시적으로 사용할 수 있습니다:

function greet(name: string | null) {
    if (name === null) {
        console.log("Hello, Guest!");
    } else {
        console.log(`Hello, ${name}!`);
    }
}

greet(null); // Hello, Guest!
greet("Alice"); // Hello, Alice!

이러한 방식으로 함수를 호출할 때 입력값의 가능성을 명확히 하고 적절한 처리를 할 수 있게 됩니다. 이는 코드의 유연성을 높이고, 다양한 상황에 대처할 수 있는 능력을 부여합니다.

4. 결론

strictNullChecks 옵션은 TypeScript에서 더욱 안전하고 견고한 코드를 작성하는 데 필수적인 도구입니다. 이 기능을 활용함으로써 개발자는 잠재적인 버그를 사전에 예방하고 유지보수가 용이한 코드를 만들 수 있습니다. 따라서 프로젝트 시작 시부터 이 설정을 고려하는 것이 좋습니다! 이를 통해 개발자는 코드의 품질을 높이고, 팀원 간의 협업을 원활하게 할 수 있는 기반을 마련할 수 있습니다.

728x90