자바 고급(JAVA)

SOLID 원칙 - ISP(인터페이스 분리 원칙)

beginner-development 2026. 5. 15. 20:56

1. ISP란?

  - 하나의 커다란 인터페이스보다는 작고 구체적인 인터페이스 여러 개로 나누는 것이 좋다는 원칙이다.

  - 왜 중요할까?

    - 인터페이스가 너무 크면, 사용하지 않는 기능까지 구현해야 해서 불필요한 의존성과 결합이 생긴다.

    - 사용자는 자신이 필요한 기능만 정의된 인터페이스에 의존해야 유지보수가 쉬워진다.

1 - 1. 인터페이스의 분리 기준

  - 핵심 개념

  • 하나의 거대한 인터페이스를 쪼개서, 필요한 기능만 포함된 인터페이스를 각각 제공하자.
  • 작고 응집도 높은 인터페이스를 여러 개 만드는 것이 더 좋은 설계이다.
interface Printer {
    void print();
}

interface Scanner {
    void scan();
}

interface Fax() {
	void fax();
}
// 프린터는 print만 할 줄 알면 됨
class SimplePrinter implements Printer {
    public void print() { ... }
}

// 스캐너는 scan만 할 줄 알면 됨
class SimpleScanner implements Scanner {
    public void scan() { ... }
}

// 가정용 복합기는 print와 scan만 할 줄 알면 된다.
class HomeMultiFunctionalPrinter implements Printer, Scanner {
	public void print() { ... }
	public void scan() { ... }
}
  • 필요한 기능만 작은 인터페이스로 분리
  • 클라이언트(구현 클래스)는 자신이 사용하는 기능만 구현하면 된다.

1 - 2. 응집도 높은 인터페이스 설계

  - 인터페이스에 포함된 메소드들이 하나의 목적을 공유하고 있을 때, 그 인터페이스는 응집도가 높다고 표현한다.

interface Repository {
	void save();      // 저장소는 save 할 수 있음
    	void delete();    // 저장소는 delete 할 수 있음
}

interface MailSender {
	void sendEmail(); // 이제 역할이 분리됨(응집도 증가)
}
  • 각각의 인터페이스가 단일 목적에 집중한다. → 필요에 따라 조합하여 사용이 가능하다.