고급 TypeScript - 고급 컴파일러 옵션: strictNullChecks 옵션

고급 컴파일러 옵션: strictNullChecks 옵션

strictNullChecks는 TypeScript의 중요한 컴파일러 옵션 중 하나로, 코드에서 nullundefined를 보다 엄격하게 처리하도록 강제합니다. 이 옵션을 활성화하면 변수나 매개변수에 대해 명시적으로 nullundefined 값을 허용해야 하며, 이는 더 안전하고 예측 가능한 코드를 작성하는 데 도움을 줍니다.

1. 기본 개념

  • 기본 동작: 기본적으로 TypeScript는 모든 타입이 null 또는 undefined 값을 가질 수 있다고 가정합니다. 즉, 변수가 특정 타입으로 선언되었더라도, 그 값은 언제든지 null이나 undefined일 수 있습니다.

  • 활성화 후 변화: 이 옵션을 활성화하면 각 변수와 매개변수에 대한 nullability가 명확해집니다. 개발자는 어떤 값이 반드시 있어야 하는지를 정의할 수 있으며, 이를 통해 런타임 오류를 줄일 수 있습니다.

2. 사용 예시

a. strictNullChecks 비활성화 시

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

위의 코드에서는 변수를 문자열로 선언했지만, null 값을 할당할 수 있는 문제가 발생합니다.

b. strictNullChecks 활성화 시

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

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

이 경우에는 TypeScript가 경고를 주어 의도하지 않은 오류를 방지합니다.

3. 유용한 패턴

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

TypeScript에서 제공하는 선택적 체인(?.)과 널 병합 연산자(??)를 활용하여 안전하게 값을 처리할 수 있습니다.

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

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

여기서 만약 사용자 객체에 이름이 없다면 "Anonymous"라는 기본값을 사용할 것입니다.

b. 함수 인자로 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에서 더욱 안전하고 견고한 코드를 작성하는 데 필수적인 도구입니다. 이 기능을 활용함으로써 개발자는 잠재적인 버그를 사전에 예방하고 유지보수가 용이한 코드를 만들 수 있습니다. 따라서 프로젝트 시작 시부터 이 설정을 고려하는 것이 좋습니다!

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe