[typescript] 제네릭 인터페이스를 활용하여 다른 제네릭 타입의 매핑 및 필터링 구현하기

제네릭(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에서 제네릭 인터페이스를 활용하여 다른 제네릭 타입의 매핑 및 필터링을 구현하는 방법에 대해 알아보았습니다.