[typescript] 제네릭 인터페이스를 활용하여 동일한 동작을 하는 다른 클래스 구현하기

제네릭 인터페이스는 TypeScript에서 재사용이 가능한 컴포넌트를 만들 때 유용합니다. 여러 클래스가 동일한 동작을 공유할 때, 제네릭 인터페이스를 사용하여 코드를 중복하지 않고 효율적으로 관리할 수 있습니다.

제네릭 인터페이스란 무엇인가요?

제네릭 인터페이스는 타입이 일반화된 상태로 선언된 인터페이스입니다. 즉, 특정 타입에 의존하지 않고 여러 다른 타입에서 유연하게 동작할 수 있도록 해줍니다.

한 예로, 동일한 동작을 하는 다른 클래스를 만들 때 제네릭 인터페이스를 사용하여 중복 코드를 줄일 수 있습니다. 예를 들어, 배열의 요소를 조작하는 메서드를 갖는 클래스들을 만들 때, 각각의 클래스마다 중복 코드를 작성하지 않고도 제네릭 인터페이스를 활용할 수 있습니다.

제네릭 인터페이스를 사용한 다른 클래스 구현하기

다음은 TypeScript에서 제네릭 인터페이스를 사용하여 다른 클래스를 구현하는 예제 코드입니다.

제네릭 인터페이스 정의:

interface Collection<T> {
    items: T[];
    addItem(item: T): void;
    removeItem(item: T): void;
}

위 코드에서 Collection은 제네릭 타입 T를 인자로 받는 인터페이스입니다. items는 제네릭 타입의 배열이며, addItemremoveItem은 해당 타입의 요소를 추가하거나 제거하는 메서드입니다.

제네릭 인터페이스를 활용한 클래스 구현:

class NumberCollection implements Collection<number> {
    items: number[] = [];

    addItem(item: number) {
        this.items.push(item);
    }

    removeItem(item: number) {
        const index = this.items.indexOf(item);
        if (index !== -1) {
            this.items.splice(index, 1);
        }
    }
}

class StringCollection implements Collection<string> {
    items: string[] = [];

    addItem(item: string) {
        this.items.push(item);
    }

    removeItem(item: string) {
        const index = this.items.indexOf(item);
        if (index !== -1) {
            this.items.splice(index, 1);
        }
    }
}

위 코드에서 NumberCollectionStringCollection 클래스는 각각 Collection 인터페이스를 구현하고 있습니다. 이를 통해 동일한 동작을 하는 다른 클래스를 만들었음에도 불구하고 중복 코드를 최소화할 수 있습니다.

결론

TypeScript에서 제네릭 인터페이스를 활용하여 동일한 동작을 하는 다른 클래스를 구현하는 방법을 살펴보았습니다. 제네릭 인터페이스를 사용하면 코드의 재사용성을 높일 뿐 아니라 중복을 줄여 유지보수가 편리해집니다. 이를 통해 효율적으로 프로그래밍할 수 있게 됩니다.