본문 바로가기

소프트웨어 설계4원칙 『인터페이스 분리 ISP』

by Recstasy 2020. 12. 2.

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가 의존하고 있는 특정 기능이 변경된다면

웹돌이 시스템도 재배포를 해야한다.

 

 그래서 인터페이스 분리는 중요하다.

 

 

 

 

 

 

 

댓글

최신글 전체

이미지
제목
글쓴이
등록일