[typescript] 다중 인터페이스 구현과 인터페이스 간의 관계

TypeScript에서는 다중 인터페이스 구현을 지원하며, 인터페이스 간에도 다양한 관계를 정의할 수 있습니다. 이번 글에서는 TypeScript에서의 다중 인터페이스 구현과 인터페이스 간의 관계에 대해 살펴보겠습니다.

다중 인터페이스 구현

TypeScript에서는 클래스가 하나 이상의 인터페이스를 동시에 구현할 수 있습니다. 이를 통해 하나의 클래스가 여러 가지 타입을 갖도록 할 수 있어 유연한 코드 작성이 가능해집니다.

다음은 다중 인터페이스 구현의 예시입니다.

interface Printable {
  print(): void;
}

interface Loggable {
  log(): void;
}

class Logger implements Printable, Loggable {
  print() {
    console.log("Printing...");
  }

  log() {
    console.log("Logging...");
  }
}

위 코드에서 Logger 클래스는 PrintableLoggable 인터페이스 모두를 구현하고 있습니다.

인터페이스 간의 관계

인터페이스 간에는 다양한 관계를 정의할 수 있습니다. TypeScript에서는 인터페이스 간의 상속, 확장, 집합 등의 관계를 표현할 수 있어 유연하고 명확한 타입 시스템을 구성할 수 있습니다.

상속(extends)

인터페이스 간의 상속은 extends 키워드를 사용하여 구현됩니다. 이를 통해 한 인터페이스가 다른 인터페이스를 확장하여 그 기능을 포함할 수 있습니다.

다음은 인터페이스 간의 상속의 예시입니다.

interface Shape {
  color: string;
}

interface Square extends Shape {
  sideLength: number;
}

const square: Square = {
  color: "red",
  sideLength: 10,
};

위 코드에서 Square 인터페이스는 Shape 인터페이스를 상속하여 color 프로퍼티를 포함하고 있습니다.

집합( intersection)

두 개 이상의 인터페이스를 결합하여 새로운 인터페이스를 만들 수 있습니다. 이를 통해 여러 인터페이스의 프로퍼티 및 메서드를 모두 포함한 새로운 인터페이스를 생성할 수 있습니다.

다음은 인터페이스 간의 집합의 예시입니다.

interface Car {
  brand: string;
}

interface Engine {
  horsepower: number;
}

type SportsCar = Car & Engine;

const sportsCar: SportsCar = {
  brand: "Ferrari",
  horsepower: 500,
};

위 코드에서 SportsCar 인터페이스는 CarEngine 인터페이스를 모두 포함하여 brandhorsepower 프로퍼티를 갖습니다.

TypeScript에서 지원하는 인터페이스 간의 관계를 활용하여 보다 유연하고 안전한 코드를 작성할 수 있습니다.

이상으로 TypeScript에서의 다중 인터페이스 구현과 인터페이스 간의 관계에 대해 알아보았습니다. 감사합니다.

참고 자료 - TypeScript Handbook: Advanced Types