티스토리 뷰

고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.

 

고수준 모듈 :  의미 있는 단일 기능을 제공하는 모듈

저수준 모듈 : 고수준 모듈 기능을 구현하기 위해 필요한 하위 기능의 실제 구현

 

예를 들어 상품의 가격을 결정하는 정책을 살펴보자.

고수준 : 쿠폰을 적용해서 가격 할인을 받을 수 있다.

저수준 : 가격 할인을 %로 할 것인가, 고정된 금액으로 할 것인가 등등...

 

 

만약 고수준인 '가격계산모듈'이 저소준 모듈(쿠폰 구현)에 의존한다면 어떤 문제가 생길까?

쿠폰 구현이 추가되거나 변경될 때마다 가격계산모듈의 코드에도 변경사항이 생길 것이다. 이러면 기능변경에 따른 프로그램의 변경이 어려워진다. 저소준 모듈이 변경되더라도 고소준 모듈은 변하지 않도록 만드는 방법은 없을까?

 

의존역전원칙(DIP)를 준수하면 이것이 가능해진다.

개방폐쇄원칙 게시글에서 보았던 암호화 예제를 다시 가져와보자.

 

수정하기 전에 FlowController는 FileDataReader에 직접 의존했었다.

 

우리는 ByteSource라는 인터페이스를 추가해 FileDataReader가 이를 구현하도록 했다. 그리고 FlowController는 ByteSource 인터페이스만을 의존하도록 만들었다.

여기서 ByteSource는 FlowController의 입장에서 만들어졌기 때문에 FlowController와 동등한 수준의 모듈로 볼 수 있다.

기존 FlowController(고수준) -> FileDataReader(저수준) 의존관계가,

      FileDataReader(저수준) -> ByteSource, FlowController(고수준) 의존관계로 역전이 일어난 것이다.

 

 

이제 우리는 FlowController(고수준)의 변경 없이 FileDataReader(저수준)을 변경할 수 있게 되었다.

기능을 확장하면서도 기존 코드를 수정하지 않게 되었다는 점에서, 의존 역전 원칙(DIP)가 개방 폐쇄 원칙(OCP)를 지킬 수 있도록 하는 기반이 된다고 볼 수 있다.

 

 

코드 출처, 참고 도서 : 개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴, 최범균 지음, 인투북스

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함