[typescript] 제네릭 인터페이스를 사용하여 다른 모듈과의 인터페이스 정의하기

다른 모듈과 상호 작용할 때 인터페이스 정의는 매우 중요합니다. 특히, 타입 안전성과 코드 유지보수를 위해서입니다. TypeScript에서는 제네릭을 사용하여 다른 모듈과의 인터페이스를 정의할 수 있습니다.

제네릭 인터페이스란?

제네릭 인터페이스는 특정 타입에 의존하지 않고 다양한 타입에 대해 재사용 가능한 인터페이스를 정의할 수 있도록 해줍니다. 이를 통해 모듈 간의 유연한 상호작용이 가능해집니다.

예를 들어, 다음과 같이 Stack 인터페이스를 제네릭으로 정의할 수 있습니다:

interface Stack<T> {
  push(item: T): void;
  pop(): T;
}

위의 예시에서 TypeScript 제네릭 문법인 <T>는 타입 매개변수를 나타냅니다. 이제 이 인터페이스를 사용하는 다른 모듈에서 Stack 인터페이스를 구체적인 타입으로 정의할 수 있게 됩니다.

제네릭 인터페이스를 사용하면 다른 모듈과의 인터페이스 정의 시 유연성을 확보할 수 있습니다.

제네릭 인터페이스 예시

다음은 제네릭 인터페이스를 사용하여 다른 모듈과의 인터페이스를 정의하는 예시입니다.

// stack.ts
interface Stack<T> {
  push(item: T): void;
  pop(): T;
}

export default Stack;

위 코드는 Stack 인터페이스를 제네릭으로 정의하고, 모듈 외부로 공개합니다.

// main.ts
import Stack from './stack';

class NumberStack implements Stack<number> {
  private items: number[] = [];

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

  pop(): number {
    return this.items.pop();
  }
}

const stack = new NumberStack();
stack.push(1);
const item = stack.pop();
console.log(item); // 1

main.ts 모듈에서는 Stack 인터페이스를 NumberStack 클래스로 구체화하여 사용하는 예시입니다.

제네릭 인터페이스를 사용하면 모듈 간의 인터페이스 정의 시 유연성을 확보할 수 있습니다.

위 예시를 통해 TypeScript에서 제네릭 인터페이스를 사용하여 다른 모듈과의 인터페이스를 정의하는 방법에 대해 설명했습니다. 이를 통해 모듈 간의 상호작용을 더욱 유연하고 안전하게 구현할 수 있습니다.

참고 자료