2025. 1. 24. 23:40ㆍProgramming Language/Typescript
이펙티브 타입스크립트 3장에서는 타입스크립트를 효과적으로 사용하는 방법에 대해 다룹니다. 주로 타입 설계와 작성 시 올바른 습관과 패턴을 강조하며, 타입스크립트 코드의 품질과 유지보수성을 높이는 다양한 전략을 소개합니다.
1. 값을 기준으로 타입을 설계하라
타입 설계는 프로그램에서 사용하는 값(value)을 기반으로 해야 합니다. 타입은 값이 가질 수 있는 가능한 상태를 모델링하는 것이며, 실제 값이 타입의 설계와 잘 맞아야 합니다.
const status = "success"; // 값 기반 타입 설계
type Status = "success" | "error" | "loading"; // 유효한 상태만 나열
Tip: 값의 패턴과 의미를 반영한 타입을 설계하면 불필요한 오류를 줄이고, 의도를 명확히 할 수 있습니다.
2. 타입 간의 차이를 명확히 하라
서로 다른 타입은 혼동되지 않도록 명확히 구분해야 합니다. 동일한 구조를 가진 타입이라도, 의미가 다른 경우 별도의 타입으로 구분하는 것이 중요합니다.
type UserId = string;
type OrderId = string;
function getUser(userId: UserId) { /* ... */ }
function getOrder(orderId: OrderId) { /* ... */ }
const id: string = "1234";
getUser(id as UserId); // 안전한 타입 변환
Tip: 의미적으로 구별되는 타입에는 명시적으로 이름을 붙여 혼란을 방지하세요.
3. 타입 좁히기 전략
타입 좁히기는 코드의 안정성을 높이는 중요한 기술입니다. 타입스크립트에서 제공하는 타입 가드를 사용하면 조건에 따라 타입을 정확히 좁힐 수 있습니다.
function isString(value: unknown): value is string {
return typeof value === "string";
}
function printValue(value: string | number) {
if (isString(value)) {
console.log(value.toUpperCase());
} else {
console.log(value.toFixed(2));
}
}
Tip: typeof, instanceof, 사용자 정의 타입 가드를 사용해 타입을 안전하게 좁히세요.
4. 타입 별칭과 인터페이스 활용
- 타입 별칭(Type Alias): 유연한 타입 정의를 위해 사용합니다.
- 인터페이스(Interface): 객체 타입을 정의할 때 사용하며, 확장(extend)이 가능합니다.
// 타입 별칭
type Point = { x: number; y: number };
// 인터페이스
interface Shape {
area(): number;
}
Tip: 복잡한 구조나 객체 타입은 인터페이스로, 간단한 타입 정의는 타입 별칭으로 작성하세요.
5. 유니언(Union)과 인터섹션(Intersection)
- 유니언 타입: 여러 가능한 타입 중 하나를 나타냅니다.
- 인터섹션 타입: 여러 타입의 조합을 나타냅니다.
type Success = { status: "success"; data: string };
type Error = { status: "error"; error: string };
type Response = Success | Error; // 유니언
Tip: 유니언 타입으로 모델링하면 다양한 상태를 안전하게 표현할 수 있습니다.
6. 엄격한 null 체크
타입스크립트에서 strictNullChecks 옵션을 활성화하면 null과 undefined를 명확히 구분할 수 있습니다. 이는 불필요한 null 관련 오류를 방지하는 데 유용합니다.
function processValue(value?: string | null) {
if (value !== null && value !== undefined) {
console.log(value.toUpperCase());
}
}
Tip: null이나 undefined 값을 다룰 때는 항상 방어적 코드를 작성하세요.
7. 불변성을 활용하라
타입스크립트의 readonly를 활용해 데이터의 불변성을 유지하면, 예상치 못한 데이터 변경을 방지할 수 있습니다.
type User = {
readonly id: number;
name: string;
};
const user: User = { id: 1, name: "Henry" };
// user.id = 2; // 오류 발생
Tip: 데이터 변경이 필요하지 않은 경우 readonly를 활용해 안정성을 높이세요.
마무리
이펙티브 타입스크립트 3장은 타입 설계와 사용에서 올바른 접근 방식을 배우는 데 중점을 둡니다. 값 기반 타입 설계, 타입 간 구분, 타입 좁히기 등의 전략을 잘 활용하면 코드의 명확성과 안전성을 크게 향상시킬 수 있습니다.
'Programming Language > Typescript' 카테고리의 다른 글
이펙티브 타입스크립트: 5장 요약 및 핵심 정리 (0) | 2025.01.29 |
---|---|
이펙티브 타입스크립트 4장: 요약 및 핵심 정리 (4) | 2025.01.25 |
이펙티브 타입스크립트: 2장 요약 및 핵심 정리 (0) | 2025.01.24 |
TypeScript 의 열거형 (ENUM) 과 대안 패턴 (2) | 2025.01.24 |