TypeScript는 유연하고 안정적인 코드를 작성할 수 있도록 도와주는 많은 기능을 제공합니다. 제네릭(Generics)은 그 중 하나로, 타입이나 인터페이스를 만들 때 유연성을 높여주는 기능입니다. 제네릭을 사용하면 여러 종류의 타입에 대해 동일한 코드를 사용할 수 있습니다.
제네릭 인터페이스도 이러한 장점을 가지고 있으며, 다른 제네릭 인터페이스를 확장하여 더 다양한 기능을 추가할 수 있습니다. 이번 포스트에서는 TypeScript에서 제네릭 인터페이스를 사용하여 다른 제네릭 인터페이스의 기능을 확장하는 방법에 대해 알아보겠습니다.
기본 제네릭 인터페이스 생성
먼저, 기본적인 제네릭 인터페이스를 생성해보겠습니다. 예를 들어, 배열과 관련된 동작을 하는 제네릭 인터페이스를 만들어보겠습니다.
interface Collection<T> {
items: T[];
addItem(item: T): void;
removeItem(item: T): void;
}
위 코드에서 Collection
은 제네릭 인터페이스로, T
타입의 아이템들을 다루는 기능을 정의하고 있습니다.
다른 제네릭 인터페이스 확장하기
Collection
인터페이스를 기반으로 다른 제네릭 인터페이스를 확장해보겠습니다. 예를 들어, ReadOnlyCollection
이라는 인터페이스를 추가로 정의해보겠습니다.
interface ReadOnlyCollection<T> extends Collection<T> {
getItem(index: number): T;
}
위 코드에서 ReadOnlyCollection
은 Collection
을 확장한 인터페이스로, 읽기 전용으로 사용할 수 있으며 getItem
메서드를 추가로 정의하고 있습니다.
이제 ReadOnlyCollection
을 사용하여 읽기 전용 배열을 다루는 코드를 작성할 수 있습니다.
이처럼 TypeScript에서 제네릭 인터페이스를 사용하여 다른 제네릭 인터페이스의 기능을 확장할 수 있습니다. 이는 코드의 재사용성을 높이고 유지보수성을 높여줍니다.
결론
제네릭 인터페이스를 사용하여 기존의 제네릭 인터페이스를 확장하는 방법을 살펴보았습니다. 이를 통해 코드를 보다 유연하고 확장 가능하게 작성할 수 있으며, TypeScript의 강력한 타입 시스템을 활용하여 안정적인 코드를 구현할 수 있습니다.