2025. 1. 24. 23:32ㆍProgramming Language/Typescript
타입스크립트는 자바스크립트를 정적 타입 언어로 확장한 도구입니다. 타입스크립트를 제대로 활용하려면, 기본 원리를 이해하고 올바른 사용 방식을 익히는 것이 중요합니다. 이번 글에서는 이펙티브 타입스크립트 2장의 내용을 기반으로, 타입스크립트의 핵심 개념을 살펴보겠습니다.
1. 타입스크립트의 타입 시스템
타입스크립트는 구조적 서브타입 시스템(Structural Type System)을 채택하고 있습니다.
이는 객체의 타입이 구조(속성과 속성 타입)에 의해 결정된다는 것을 의미합니다. 예를 들어, 아래 두 객체는 서로 다른 인터페이스로 선언되었지만, 속성과 타입이 동일하기 때문에 호환됩니다.
interface Point2D {
x: number;
y: number;
}
interface Point3D {
x: number;
y: number;
z: number;
}
const point: Point3D = { x: 1, y: 2, z: 3 };
const point2D: Point2D = point; // 정상 작동
이러한 유연성 덕분에 타입 선언이 간단하지만, 예상치 못한 타입 호환성 문제를 유발할 수도 있습니다.
2. 타입 추론과 명시적 타입 선언
타입스크립트는 가능한 한 타입을 자동으로 추론합니다. 그러나 중요한 변수나 함수 반환값은 명시적으로 타입을 선언하는 것이 좋습니다. 명시적 선언은 코드의 가독성을 높이고, 의도하지 않은 타입 추론 오류를 방지할 수 있습니다.
// 타입 추론
const name = "Henry"; // 자동으로 string으로 추론
// 명시적 타입 선언
function add(a: number, b: number): number {
return a + b;
}
3. 타입 좁히기(Type Narrowing)
타입 좁히기는 넓은 타입에서 더 구체적인 타입으로 변환하는 과정입니다. 조건문, 타입 가드, 또는 타입 단언을 사용하여 이를 구현할 수 있습니다.
function printId(id: string | number): void {
if (typeof id === "string") {
console.log(id.toUpperCase()); // string 타입으로 좁혀짐
} else {
console.log(id.toFixed(2)); // number 타입으로 좁혀짐
}
}
타입 가드는 타입 안정성을 유지하면서 조건에 따라 다른 동작을 수행할 수 있게 해줍니다.
4. 타입 단언(Type Assertion)
타입 단언은 개발자가 특정 값의 타입을 직접 지정하는 방법입니다. 이를 통해 컴파일러가 타입 검사를 무시하도록 할 수 있지만, 잘못 사용하면 런타임 오류를 유발할 수 있으므로 주의가 필요합니다.
const someValue: any = "this is a string";
const strLength: number = (someValue as string).length; // 타입 단언
5. any 사용을 최소화하자
any 타입은 모든 값을 허용하는 유연성을 제공하지만, 타입스크립트의 타입 시스템을 무력화시킵니다. 가능한 경우 unknown, 유니언 타입, 또는 구체적인 타입으로 대체하여 코드 안정성을 높이는 것이 좋습니다.
function processValue(value: unknown): void {
if (typeof value === "string") {
console.log(value.toUpperCase());
}
}
6. 타입 선언 파일 활용하기
외부 라이브러리나 자바스크립트 코드에서 타입 정보를 제공하려면 .d.ts 파일을 사용합니다. 이는 프로젝트의 타입 안정성을 높이고, IDE의 자동 완성 기능을 향상시킵니다.
7. 엄격한 타입 검사로 안정성을 확보하자
strict 옵션을 활성화하면 타입스크립트의 엄격한 타입 검사를 활용할 수 있습니다. 이 옵션은 잠재적인 버그를 줄이고 코드 품질을 높이는 데 큰 도움이 됩니다.
// tsconfig.json
{
"compilerOptions": {
"strict": true
}
}
8. 코드와 타입의 분리
타입스크립트의 타입은 컴파일 타임에만 작동하며, 런타임에는 제거됩니다. 따라서 타입 정의는 코드의 런타임 동작에 영향을 미치지 않습니다.
마무리
이펙티브 타입스크립트 2장은 타입스크립트의 핵심 개념과 철학을 이해하는 데 필수적인 내용을 다룹니다. 타입 시스템의 구조적 특성과 타입 추론, 좁히기, 단언 등을 잘 활용하면 안정적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 또한 any 사용을 지양하고, 엄격한 타입 검사를 통해 타입스크립트의 강력한 장점을 최대한 활용해 보세요!
타입스크립트는 단순한 도구가 아니라, 올바른 사고 방식을 요구하는 강력한 언어입니다. 이번 요약을 통해 타입스크립트의 원리를 깊이 이해하고, 효과적으로 사용하는 데 도움이 되기를 바랍니다. 😊
'Programming Language > Typescript' 카테고리의 다른 글
이펙티브 타입스크립트 4장: 요약 및 핵심 정리 (4) | 2025.01.25 |
---|---|
이펙티브 타입스크립트: 3장 요약 및 핵심 정리 (0) | 2025.01.24 |
TypeScript 의 열거형 (ENUM) 과 대안 패턴 (2) | 2025.01.24 |
이펙티브 타입스크립트: 1장 요약 및 핵심 정리 (0) | 2023.11.02 |