본문 바로가기
아키텍쳐를 고민하기

패키지 설계의 원칙 이란 무엇일까?

by simplify-len 2020. 9. 5.

Photo by Scott Webb on Unsplash


클린 아키텍쳐의 Ch20 - 패키지 설계의 원칙을 내용을 읽고, 저의 주관과 합쳐 아래 내용을 적었습니다.
혹시라도 잘못된 부분, 잘못 이해된 부분에 대해서는 댓글 남겨주시면 반영하도록 하겠습니다.

들어가기

우리가 객체지향 프로그래밍을 할 때 흔히 SOLID 원칙이라 불리는 내용이 있습니다. SOLID 원칙을 잘 지켜내면서, 코딩을 한다라면- 그 코드는 흔히 질좋은 코드다. 라고 이야기할 수 있습니다. 마찬가지로, 패키지를 구성하는 방법에서도 SOLID 와 같은 원칙이 존재한다고 생각했습니다. 그런 부분이 궁금해고, 그 부분을 해결할 수 있는 요소로서 로버트 마틴의 클린 아키텍처 책을 살펴보게 되었습니다. 

저와 같은 고민을 가진 사람들에게 조금이나마 도움이 되었으면 좋겠습니다.

그래서 패키지가 뭔데?

 자바를 주로 사용하는 저에게 패키지는 사실 '어떤 클래스 모음집' 그 이상, 그 이하도 아니였습니다. 그러나, 최근 Object(조영호) 님 책에서 패키지는 가시성을 보장해준다 라는 말을 듣고 난 후, 조금 더 관심을 갖고자 했습니다.

 패키지는, 작은 애플리케이션을 조직화한다면 클래스가 아주 편리한 단위이지만, 커다란 애플리케이션에서 사용하기에는 너무 작다. 큰 애플리케이션을 조직화할 때는 클래스보다 '더 큰' 무엇이 필요한데, 이것을 패키지(package)라고 한다.

 즉, 클린 아키텍쳐에서 말하는 패키지란, 어떤 큰 애플리케이션을 조직화할 때 사용됩니다.

우리는 흔히 클래스를 논할 때, 클래스의 결합도는 낮아야 하며, 응집도는 높아야 한다. 라고 말합니다. 이 말은 곧, 패키지 설계 원칙에서도 적용됩니다.

패키지 응집도는 높아야 하며, 결합도는 낮아야 한다.

 좀 더 큰 클래스라고 생각하면 단순합니다. 패키지 안에 클래스간에 응집도는 높아야 하며, 서로 다른 패키지간에 결합도는 낮아야 합니다

그럼 패키지 설계의 원칙을 지키지 위해 우리는 다음 6가지의 원칙을 이해하기 위한 노력을 할 것입니다.

아래 글은 여기서 참고했습니다.

1. 재사용 릴리즈 등가 원칙(Release/Reuse Equivalency Principle) - REP

  • 재사용할 때 같이 몰려다니는 클래스들을 한 패키지로 묶어놓고, 이것들을 릴리즈나 유지보수의 단위로 취급하면 만드는 사람이나 재사용하는 사람 모두 편하다.
  • 재사용의 가장작은 단위는 릴리스의 가장 작은 단위다.

2. 공통 폐쇠 원칙(Common Closure Principle) - CCP

  • SRP 의 패키지까지의 확장.
  • 만약 어떤것을 변경해야 한다면, 그것 때문에 바꾸어야 할 클래스들이 단 한 패키지에만 몰려 있기를 원한다.

3. 공통 재사용 원칙(Common Reuse Principle) - CRP

  • ISP 의 패키지까지의 확장.
  • 서로 다른 클라이언트가 사용하는 클래스들은 최대한 분리해야 한다.

4. 의존 관계 비순환 원칙(Acyclic Dependencies Principle) - ADP

  • 패키지 읜존 관계 그래프에 순환이 있다면 빌드할 때나 개발할 때 문제가 생길 수도 있다. 순환이 있으면 어떤 클래스와 패키지들을 먼저 빌드해야 하고 어떤 것을 다음에 할지 결정할 수 없다.

5. 안정된 의존 관계 원칙(Stable Dependencies Principle) - SDP

  • 바뀌기 쉬워서 자신보다 불안정한 패키지들에게 의존하면 안 된다.
  • 모든 패키지 의존 관계 화살표는 언제나 화살표가 출발하는 패키지(의존하는 패키지)보다 더 변경하기 어려운 패키지를 가리켜야 한다.

6. 안정된 추상화 원칙(Stable Abstractions Principle) - SAP

  • 안정된 패키지들은 바꾸기 어렵지만 이 패키지들을 유연하게 유지하는 방법이 필요할때도 있다.
  • OCP에 따르면 모듈을 변경하지 않고도 확장할 수 있는 방법이 있다.
  • 패키지가 안정적일수록 더 추상적이어야 한다.
  • 패키지 내부의 추상클래스와 인터페이스의 개수가 많아질수록 패키지의 추상도도 높아진다.
  • 많은 의존 관계를 받아들이는 패키지는 매우 안정되어야 하며, 그러므로 반드시 매우 추상적이어야 한다.
  • SDP 와 SAP 를 합치면 DIP 의 패키지 판이 된다.

 

마무리

 다음 포스트에서는 각각의 원칙들에 대해서 좀 더 자세히 살펴보고, 되도록이라면 코드로서 이해해보도록 하겠습니다.

오늘도 저의 글을 읽어주셔서 감사합니다.

 

> 다음 포스트 내용

패키지 응집도의 원칙

패키지 결합도의 원칙

 

댓글