인터페이스 분리 원리

Interface segregation principle

소프트웨어 엔지니어링 분야에서, 인터페이스 분리 원칙(ISP)은 어떤 코드도 사용하지 않는 방법에 의존하도록 강요되어서는 안 된다고 명시하고 있다.[1]ISP는 매우 큰 인터페이스를 더 작고 구체적인 인터페이스로 분할하여 고객이 관심 있는 방법만 알면 된다.이렇게 축소된 인터페이스를 역할 인터페이스라고도 한다.[2]ISP는 시스템을 분리하여 사용하기 때문에 리팩터링, 변경 및 재구성이 용이하다.ISP는 객체지향 설계의 5대 SOLD 원리의 하나로, HIGHT의 고응집성 원리와 유사하다.[3]물체지향 설계를 넘어 ISP 역시 일반적으로 분산된 시스템 설계와 특히 마이크로 서비스 설계의 핵심 원리다.ISP는 마이크로 서비스 설계를 위한 6가지 이상 원칙 중 하나이다.[4]

객체 지향 설계의 중요성

객체 지향 설계 내에서 인터페이스는 코드를 단순화하고 의존성과의 결합을 막는 장벽을 만드는 추상화 계층을 제공한다.

소프트웨어 장인정신을 위한 매니페스토에 서명한 많은 소프트웨어 전문가들에 따르면, 잘 짜여지고 자기 설명적인 소프트웨어를 쓰는 것은 일하는 소프트웨어를 쓰는 것만큼이나 거의 중요하다고 한다.[5]인터페이스를 사용하여 소프트웨어의 의도를 더 자세히 설명하는 것은 종종 좋은 생각이다.

시스템은 여러 레벨에서 너무 결합되어 많은 추가 변경이 필요 없이 더 이상 한 장소에서 변경을 할 수 없다.[1]인터페이스나 추상 클래스를 사용하면 이러한 부작용을 방지할 수 있다.

기원

ISP는 로버트 C에 의해 처음 사용되고 공식화되었다. 제록스 상담 중 마틴이요제록스는 스테이플링과 팩스 등 다양한 업무를 수행할 수 있는 프린터 시스템을 새로 만들었다.이 시스템을 위한 소프트웨어는 처음부터 새로 만들어졌다.소프트웨어가 성장하면서 작은 변화라도 1시간의 재배치 주기가 소요될 정도로 수정이 점점 어려워져 개발이 거의 불가능해졌다.

설계상의 문제는 거의 모든 태스크에서 하나의 Job 클래스가 사용된다는 것이었다.인쇄 작업이나 스테이플 작업을 수행해야 할 때마다 잡 클래스에 전화가 걸려왔다.이로 인해 다양한 고객에 특정한 다양한 방법을 가진 '뚱뚱한' 클래스가 탄생했다.이러한 설계 때문에, 스테이플 작업은 인쇄 작업의 모든 방법을 알 수 있을 것이다. 비록 인쇄 작업에는 쓸모가 없더라도 말이다.

마틴이 제안한 솔루션은 오늘날 인터페이스 분리 원칙이라고 불리는 것을 활용했다.제록스 소프트웨어에 적용되어, Job 클래스와 그 클라이언트의 인터페이스 계층은 종속성 뒤집기 원칙을 사용하여 추가되었다.하나의 큰 Job 클래스를 갖는 대신에 Stephin Job 인터페이스 또는 Print Job 인터페이스가 각각 Stephin 클래스와 Print 클래스에 의해 사용될 Job class의 호출 메서드를 생성하였다.따라서 각 작업 유형별로 하나의 인터페이스가 생성되었으며, 이 인터페이스는 모두 Job 클래스에 의해 구현된 인터페이스는 모두 Job class이다.

대표적인 위반

인터페이스 분리 원칙의 대표적인 위반은 신속한 변화를 위한 소프트웨어 개발: 'ATM 거래 사례'의 원칙, 패턴 및 실천요강과[1] 로버트 C가 작성한 기사에 제시되어 있다. 마틴은 ISP에 대해 구체적으로 얘기했다.[6]이 예에서는 예금 요청이나 인출 요청과 같은 모든 요청을 처리하는 ATM의 사용자 인터페이스와 이 인터페이스를 개별 및 보다 구체적인 인터페이스로 분리할 필요가 있는 방법에 대해 설명한다.

참고 항목

  • SOLID – SOLD의 "I"는 인터페이스 분리 원칙을 나타낸다.

참조

  1. ^ a b c 마틴, 로버트(2002년).신속한 변화를 위한 소프트웨어 개발: 원칙, 패턴 및 관행피어슨 교육.
  2. ^ 역할 인터페이스
  3. ^ "David Hayden, Interface-Segregation Principle (ISP) - Principles of Object-Oriented Class Design". Archived from the original on 2010-08-20. Retrieved 2009-11-07.
  4. ^ Paulo Merson, MicroService Design 원칙: 솔리드보다는 생각하는 이상, InfoQ eMag 이슈 #91, 2021년 2월
  5. ^ 소프트웨어 장인 정신의 선언
  6. ^ 로버트 C.마틴,인터페이스 분리 원칙, C++ 보고서, 1996년 6월

외부 링크

  • OOD원리 – SOLD에 대한 자세한 설명 및 링크