TypeScript의 인터페이스 분리 원칙

Clients shouldn’t be forced to depend on methods they do not use.



이 원칙의 이면에 있는 아이디어는 큰 인터페이스보다 더 작고 더 구체적인 인터페이스를 갖는 것이 더 낫다는 것입니다.

많은 기능을 포함하는 인터페이스가 하나만 있는 경우 해당 인터페이스의 클라이언트는 필요하지 않은 동작을 구현해야 합니다. 대신 인터페이스가 더 작은 경우 클라이언트는 필요한 동작만 구현할 수 있습니다.

또 다른 이점은 인터페이스를 업데이트할 때 변경 사항이 더 적은 클라이언트에 영향을 미치므로 코드를 깨뜨릴 위험이 적다는 것입니다.

클래스는 여러 인터페이스를 구현할 수 있으므로 하나의 인터페이스에 모든 것을 포함할 필요가 없습니다.


다음 나쁜 예에서 우리는 2가지 방법을 가진 동물을 위한 인터페이스를 가지고 있습니다: 걷기와 날기.

보시다시피 Dog 클래스는 fly 메서드가 필요하지 않더라도 fly 메서드를 구현해야 합니다.

interface Animal {
  walk(): void;
  fly(): void;
}

class Dog implements Animal {
  walk() {
    console.log("Walking");
  }

  fly() {
    throw new Error("Dogs cannot fly");
  }
}

class Duck implements Animal {
  walk() {
    console.log("Walking");
  }

  fly() {
    console.log("Flying");
  }
}


이 원칙에 따라 Animal 인터페이스를 여러 인터페이스로 분할할 수 있습니다. 이렇게 하면 Dog 클래스는 필요한 메서드만 구현하면 됩니다.

interface AnimalCanWalk {
  walk(): void;
}

interface AnimalCanFly {
  fly(): void;
}

class Dog implements AnimalCanWalk {
  walk() {
    console.log("Walking");
  }
}

class Duck implements AnimalCanWalk, AnimalCanFly {
  walk() {
    console.log("Walking");
  }

  fly() {
    console.log("Flying");
  }
}

좋은 웹페이지 즐겨찾기