Python

[Python] SOLID_인터페이스 분리(ISP)

UnoCoding 2023. 2. 9. 12:40

SOLID  이란?

클린 코딩 디자인중 하나인 SOLID 원칙에 대해서 천천히 알아보자.

 

  • S: 단일 책임 원칙  
  • O: 개방/폐쇄의 원칙 
  • L: 리스코프 치환 원칙
  • I: 인터페이스 분리 법칙 👈 현위치
  • D: 의존성 역전 원칙 👈 현위치

 

인터페이스 분리 원칙

 

* 용어 정리 

    인터페이스 : 객체가 노출하는 매서드의 집합이다. 즉 객체가 수신하거나 해석할 수 있는 모든 메시지가 인터페이스를 

    구성하며 이것들은 다른 클라이언트에서 호출 할 수 있는 요청들이다.

 

인터페이스 분리 원칙(Interface Segregation Principle)은 다중 메서드를 가진 인터페이스가 있다면 더 적은 수의 메서드를 가진 여러 개의 메서드로 분할하는 것이 좋다는 것이다.

 

가능한 작은 단위로 인터페이스를 분리하면 각 클래스가 명확한 동작과 책임을 갖게 되기 때문에 응집력이 높아진다.

 

위와 같은 다이어그램이 있다고 하자.

class Printer:
    def print_text_document(self):
        print("text document")

    def print_image_document(self):
        print("image document")

 

위 클래스를 사용하는 경우 print_image_document메서드를 필요로 하지 않고 print_text_document만 필요한 경우 어떨까? 사용하는 사람 입장은 불필요하게 print_image_document 함수가 구현되어 있다.

 

사용자는 EventParser 인터페이스를 상속한다는 이유로 print_image_document, print_text_document() 메소드를 제공 할것이다. 이것은 결합력을 높여 유연성이 떨어뜨리며 클라이언트가 필요하지도 않은 메서드를 구현하도록 한다.

 

개선하기.

class TextPrinter(Printer):
    def print(self):
        print("text document")

class ImagePrinter(Printer):
    def print(self):
        print("image document")

 

 

위와 같은 예제는 약간 과정된 예제이지만 이해를 위해 참고하기 바란다.