2023-04-21-OOP-ISP
인터페이스 분리 원칙 (ISP - Interface Segregation Principle)
- 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다
- 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명확하게 분리해서 고려해야 한다는 것을 의미한다.
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나 보다 낫다.
인터페이스란?
- 일반적으로 어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치를 의미한다.
일반적인 인터페이스의 특징 3가지
- 인터페이스의 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 쉽게 대상을 조작하거나 의사를 전달할 수 있다.
- 인터페이스 자체는 변경하지 않고 단순히 내부 구성이나 작동 방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다.
- 대상이 변경되더라도 동일한 인터페이스를 제공하기만 하면 아무런 문제 없이 상호작용 할 수 있다.
객체 관점에서 인터페이스를 구성하기 위해서는?
- 좀 더 추상적인 인터페이스
- 너무 구체적인 인터페이스보다는 추상적인 인터페이스를 설게하는 것이 좋다.
- 최소 인터페이스
- 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말라는 것이다.
- 인터페이스와 구현간에 차이가 있다는 점을 인식
- 객체의 외부를 공용 인터페이스라고 부르고, 객체의 내부 구조와 작동 방식을 구현이라고 한다. 객체를 구성하지만 공용 인터페이스에 포함되지 않는 모든 것이 구현에 포함된다.
구현
- 객체는 상태를 가진다.
- 상태는 어떤 식으로든 객체에 포함되겠지만 객체 외부에 노출되는 공용 인터페이스의 일부는 아니다. 따라서 상태를 어떻게 표현할 것인가는 객체의 구녛에 해당한다.
- 객체는 행동을 가진다.
- 행동은 메시지를 수신했을 때만 실행되는 일종의 메시지 처리 방법이다. 이 처리 방법을 메서드라고 한다. 메서드를 구성하는 코드 자체는 객체 외부에 노출되는 곡용 인터페이스의 일부는 아니기 때문에 객체의 구현 부분에 포함된다.
- 객체의 외부와 내부를 분리하라는 것은 결국 객체의 공용 인터페이스와 구현을 명확하게 분리하라는 말과 동일하다.
ISP를 따를 때의 이점
- 한 기능에 변경이 발생하면 다른 기능을 사용하는 클라이언트에도 영향을 미치게 된다.
- 때문에 사용하지 않지만 의존성을 가지고 있어 불필요한 수정사항에 대해 전체를 rebuild 해야 하는 문제가 발생한다.
- 즉, 독립적인 개발 및 배포가 불가능하다는 의미이다.
- 따라서 사용하는 기능만 제공하도록 인터페이스를 분리함으로써 한 기능에 대한 변경의 여파를 최소화 하도록 해야 한다.
- 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다
주의점
- 객체의 공용 인터페이스와 구현을 명확하게 분리해야 한다.
출처 : 위키백과, 메타버스 강사님 강의, 객체지향의 사실과 오해
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.