데브허브 | DEVHUB | {본질을 꿰뚫는 TS} - Generic 실습{본질을 꿰뚫는 TS} - Generic 실습
- 제네릭은 타입을 미리 정하지 않고 어떤 타입이든 허용하여 유연성을 제공하며, 타입 추론이 가능합니다. 🔄
Object나 any 대신 제네릭을 사용하는 주된 이유는, 값을 꺼낼 때 원래 타입으로의 형변환 없이 타입 안전성을 보장하기 위함입니다. 🛡️
- 제네릭 클래스 및 인터페이스의 타입은 인스턴스 생성 시점에 결정되며, 정적 멤버는 클래스 제네릭을 사용할 수 없습니다. 🏭
- 타입 별칭(
type MyType<T> = ...)도 제네릭을 활용하여 유연한 타입 정의를 가능하게 하며, 컴파일 시점에 실제 타입으로 치환됩니다. 🏷️
- 타입 판별자(Discriminator)는 유니온 타입 내에서 특정 속성 유무로 타입을 구분하여 동적인 상황이나 외부 API 데이터 처리에 유용합니다. 🔍
extends 키워드는 제네릭 타입에 제약 조건을 부여하여, 특정 타입 또는 그 하위 타입만 허용함으로써 코드의 안정성을 높이고 개발 시 오류를 미리 차단합니다. 🔗
- 조건부 타입(
T extends U ? A : B)은 제네릭에서 특정 조건에 따라 다른 타입을 할당하는 강력한 기능으로, 복잡한 타입 로직 구현에 사용됩니다. ❓
keyof 연산자는 객체 타입의 모든 키를 유니온 타입으로 반환하며, T[K]는 특정 키 K에 해당하는 값의 타입을 가져옵니다. 🔑
- 객체 타입의 인터섹션(
&)은 두 객체의 속성을 병합하여 확장된 타입을 생성하며, 프리미티브 타입 간에는 교집합을 의미합니다. ➕
Promise<T>와 async 함수는 비동기 작업의 결과 타입을 명확히 정의하여 타입 안전성을 확보하며, T를 명시하지 않으면 unknown으로 인식됩니다. ⏳
- 실습 예제를 통해
Change, ItemPrice, DeleteArray와 같은 복잡한 유틸리티 타입을 제네릭, 매핑된 타입, 조건부 타입을 활용하여 구현하는 방법을 학습했습니다. 🛠️
- 타입스크립트의 제네릭은 런타임 오류를 방지하고, 범용적이면서도 강력한 타입 안전성을 제공하여 개발 생산성을 향상시키는 핵심 기능입니다. ✅