제네릭(generic) 인터페이스는 TypeScript에서 매우 유용하게 활용될 수 있습니다. 이번 글에서는 제네릭 인터페이스를 사용하여 다른 제네릭 타입의 매핑(mapping)과 필터링(filtering)을 구현하는 방법을 살펴보겠습니다.
제네릭 인터페이스란?
제네릭(generic) 인터페이스는 타입 안전성을 유지하면서 여러 타입에 대해 재사용 가능한 코드를 작성할 수 있게 해줍니다.
interface Box<T> {
value: T;
}
위의 예시에서 Box
는 제네릭 타입 T
에 의해 매개변수화되어 있습니다. 이렇게 정의된 제네릭 인터페이스는 나중에 다양한 타입(number
, string
, 등)으로 구체화될 수 있습니다.
다른 제네릭 타입의 매핑
다른 제네릭 타입의 매핑은, 예를 들어, 배열의 각 요소 타입을 변환할 때 유용하게 활용될 수 있습니다. 아래 예시를 통해 살펴보겠습니다.
interface Box<T> {
value: T;
}
function mapBox<U, T>(box: Box<T>, mapper: (value: T) => U): Box<U> {
return { value: mapper(box.value) };
}
let box: Box<number> = { value: 100 };
let stringBox: Box<string> = mapBox(box, value => value.toString());
위의 예시에서 mapBox
함수는 제네릭 타입 U
를 적용하여 Box
의 요소 타입을 변환하는 역할을 합니다.
다른 제네릭 타입의 필터링
다른 제네릭 타입의 필터링은, 예를 들어, 배열에서 특정 조건을 만족하는 요소만을 걸러낼 때 유용하게 활용될 수 있습니다.
interface Box<T> {
value: T;
}
function filterBox<T>(box: Box<T>, predicate: (value: T) => boolean): Box<T> | null {
return predicate(box.value) ? box : null;
}
let box: Box<number> = { value: 100 };
let filteredBox: Box<number> | null = filterBox(box, value => value > 50);
위의 예시에서 filterBox
함수는 제네릭 타입 T
에 의해 매개변수화된 Box
를 조건에 따라 필터링하여 새로운 Box
를 반환합니다.
결론
제네릭 인터페이스를 활용하여 다른 제네릭 타입의 매핑 및 필터링을 구현하면, 유연하고 안전한 타입 시스템을 유지하면서 재사용 가능한 코드를 작성할 수 있습니다. TypeScript의 강력한 제네릭 기능을 적극 활용하여 보다 유연하고 타입 안전한 코드를 작성해보세요.
참고 자료: TypeScript 공식 문서 - 제네릭
이상으로 TypeScript에서 제네릭 인터페이스를 활용하여 다른 제네릭 타입의 매핑 및 필터링을 구현하는 방법에 대해 알아보았습니다.