SOLID 4번째 원칙은 인터페이스 분리다.
소프트웨어 설계의 관점에서
가제트 형사는 인터페이스분리 원칙을 위반했다.
가제트 형사의 모자뚜껑을 인터페이스라고 생각해보자.
모자 뚜껑 인터페이스는 과도하게 많은 도구를 불러온다.
이 때문에 가제트 형사는 급한 상황에서
가끔 끔찍한 실수를 저지른다.
모자뚜껑 ← 프로펠러
모자뚜껑 ← 망치
모자뚜껑 ← 주먹
....
많은 도구가 모자뚜껑 1개의 인터페이스에 연결되어 있다.
그래서 망치 하나를 꺼내고 싶어도 그렇게 할 수 없다.
인터페이스와 연결된 필요없는 도구들까지 함께 튀어나오기 때문이다.
사실상 가제트 모자는 인터페이스도 아니다.
가제트 모자는 main클래스이며, 핵심이다.
그리고 많은 도구들이 main클래스와 직접적으로 연결되어 있다면,
곧 심각한 결함이 발생되리라는 점을 쉽게 예상할 수 있다.
결론적으로 가제트 형사는 언젠가 붕괴될 시스템에 노출되어 있다.
그래서 가제트 형사 시리즈가 인기를 끌었을 지도 모른다.
│인터페이스 분리 Interface Substitution Principle
현재 가제트 형사의 모자 인터페이스는 아래와 같이 무겁다.
모자기능을 사용하려면 가제트 시스템을 호출해야 하는데
이때 자켓기능1 ( )기능까지 가져오게 되며,
그 결과 인터페이스가 무거워진다.
간단하게 인터페이스를 분리해보자.
인터페이스 분리를 순수하게 한다면 위와 같다.
(디자인패턴을 사용하지 않고)
가제트 Main클래스는 추상클래스(모자 인터페이스)의 기능을 상속받는다.
이로써 모자 클래스는 모자 인터페이스에 연결된 모자기능만을 사용할 수 있고,
불필요한 자켓 기능까지 불러올 필요가 없다.(인터페이스 분리)
│정리
웹개발에서 인터페이스 분리를 사용해야 할 경우는
외부 프레임워크를 사용할 때이다.
가령, 웹돌이 시스템을 구축하고 있는 아키텍처의 상황을 가정해보자.
아키텍처는 마감일을 맞추려 J프레임워크를 사용했다.
그런데 J프레임워크 개발자는
특정한 DB T와 라이브러리-K를 반드시 사용하도록 만들었다.
결론적으로 웹돌이 시스템은
「프레임워크J」, 「DataBase T」, 「라이브러리 K」
3가지에 의존하게 된다.
이는 별로 좋지 않는 상황이다.
DataBase T, 라이브러리-K가 웹돌이 시스템과
전혀 관계없는 기능을 포함하더라도 어쩔 수 없이 사용해야하기 때문이다.
만일, DataBase T가 의존하고 있는 특정 기능이 변경된다면
웹돌이 시스템도 재배포를 해야한다.
그래서 인터페이스 분리는 중요하다.
'코드 스터디' 카테고리의 다른 글
퍼사드 || 미디에이터 패턴 (0) | 2020.12.07 |
---|---|
소프트웨어 설계5원칙 『의존성역전 DIP』 (0) | 2020.12.04 |
소프트웨어 설계3원칙 『리스코프 치환 LSP』 (0) | 2020.11.30 |
소프트웨어 설계2원칙 『개방폐쇄 OCP』 (0) | 2020.11.27 |
소프트웨어 설계1원칙 SOLID『단일책임원칙::SRP』 (0) | 2020.11.26 |
댓글