고급 TypeScript - 고급 컴파일러 옵션: strictNullChecks 옵션
고급 컴파일러 옵션: strictNullChecks 옵션
strictNullChecks
는 TypeScript의 중요한 컴파일러 옵션 중 하나로, 코드에서 null
과 undefined
를 보다 엄격하게 처리하도록 강제합니다. 이 옵션을 활성화하면 변수나 매개변수에 대해 명시적으로 null
및 undefined
값을 허용해야 하며, 이는 더 안전하고 예측 가능한 코드를 작성하는 데 도움을 줍니다.
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에서 더욱 안전하고 견고한 코드를 작성하는 데 필수적인 도구입니다. 이 기능을 활용함으로써 개발자는 잠재적인 버그를 사전에 예방하고 유지보수가 용이한 코드를 만들 수 있습니다. 따라서 프로젝트 시작 시부터 이 설정을 고려하는 것이 좋습니다!