포스트

2023-04-21-OOP-ISP

2023-04-21-OOP-ISP
AI 요약

인터페이스 분리 원칙(ISP)은 클라이언트가 사용하지 않는 메서드에 의존하지 않도록, 특정 클라이언트를 위한 여러 개의 인터페이스를 설계해야 함을 강조함. 이는 객체의 공용 인터페이스를 추상적이고 최소한으로 유지하며 구현과 명확히 분리함으로써, 시스템의 내부 의존성을 약화시키고 변경의 영향을 최소화하는 이점이 있음.

인터페이스 분리 원칙 (ISP - Interface Segregation Principle)

  • 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다
  • 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명확하게 분리해서 고려해야 한다는 것을 의미한다.
  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나 보다 낫다.

인터페이스란?

  • 일반적으로 어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치를 의미한다.

일반적인 인터페이스의 특징 3가지

  1. 인터페이스의 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 쉽게 대상을 조작하거나 의사를 전달할 수 있다.
  2. 인터페이스 자체는 변경하지 않고 단순히 내부 구성이나 작동 방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다.
  3. 대상이 변경되더라도 동일한 인터페이스를 제공하기만 하면 아무런 문제 없이 상호작용 할 수 있다.

객체 관점에서 인터페이스를 구성하기 위해서는?

  1. 좀 더 추상적인 인터페이스
    • 너무 구체적인 인터페이스보다는 추상적인 인터페이스를 설게하는 것이 좋다.
  2. 최소 인터페이스
    • 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말라는 것이다.
  3. 인터페이스와 구현간에 차이가 있다는 점을 인식
    • 객체의 외부를 공용 인터페이스라고 부르고, 객체의 내부 구조와 작동 방식을 구현이라고 한다. 객체를 구성하지만 공용 인터페이스에 포함되지 않는 모든 것이 구현에 포함된다.

구현

  • 객체는 상태를 가진다.
    • 상태는 어떤 식으로든 객체에 포함되겠지만 객체 외부에 노출되는 공용 인터페이스의 일부는 아니다. 따라서 상태를 어떻게 표현할 것인가는 객체의 구녛에 해당한다.
  • 객체는 행동을 가진다.
    • 행동은 메시지를 수신했을 때만 실행되는 일종의 메시지 처리 방법이다. 이 처리 방법을 메서드라고 한다. 메서드를 구성하는 코드 자체는 객체 외부에 노출되는 곡용 인터페이스의 일부는 아니기 때문에 객체의 구현 부분에 포함된다.
  • 객체의 외부와 내부를 분리하라는 것은 결국 객체의 공용 인터페이스와 구현을 명확하게 분리하라는 말과 동일하다.

ISP를 따를 때의 이점

  • 한 기능에 변경이 발생하면 다른 기능을 사용하는 클라이언트에도 영향을 미치게 된다.
    • 때문에 사용하지 않지만 의존성을 가지고 있어 불필요한 수정사항에 대해 전체를 rebuild 해야 하는 문제가 발생한다.
  • 즉, 독립적인 개발 및 배포가 불가능하다는 의미이다.
    • 따라서 사용하는 기능만 제공하도록 인터페이스를 분리함으로써 한 기능에 대한 변경의 여파를 최소화 하도록 해야 한다.
  • 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다

주의점

  • 객체의 공용 인터페이스와 구현을 명확하게 분리해야 한다.

출처 : 위키백과, 메타버스 강사님 강의, 객체지향의 사실과 오해

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.