UML Packages 원칙

먼저, UML에서 패키지가 어떻게 표현될 수 있는지 몇 가지 예시로 알아보자.

 

 

간단한 UML 패키지

 

 

자신의 내용을 보여주는 UML 패키지

 

 

UML 패키지의 중첩구조 (포함관계)

 

 

패키지의 내부 코드가 다른 패키지에 속한 코드에 의존하는 경우

 

 

컴포넌트와 패키지 사이의 의존관계

 

 

 

이렇게 표현한 패키지를 바탕으로 소프트웨어 시스템을 잘 구조화하고 관리하기 위해서

패키지를 어떻게 조직하고 의존성을 관리할 것인지에 대한 몇 가지 원칙들이 있다.

 

 

 

재사용/릴리즈 등가 원칙 (Release/reuse Equivalency Principle, REP)

 

이름 그대로 재사용 단위는 릴리스 단위와 같다는 원칙이다.

 

여기에서 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 한다.

단순히 뒤죽박죽 임의로 선택된 클래스와 모듈로 구성되어서는 안된다.

컴포넌트를 구성하는 모든 모듈은 서로 공유하는 중요한 테마나 목적이 있어야 한다.

 

 

하지만, 이 원칙만으로는 클래스와 모듈을 단일 컴포넌트로 묶는 방법을 제대로 설명하기 힘들다.

 

 

 

 

공통 폐쇄 원칙(Common Closure Priciple, CCP)

 

동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶고, 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 분리하라는 원칙이다.

 

하나의 책임만 갖는 원칙(SRP)을 패키지까지 확장한 것이다.

 

주로 유지보수, 재사용성을 중점으로 만들어진 원칙이다.

보통 하나가 지켜지면 그에 관한 다른것이 안되기 때문에, 재사용에 적합한지 릴리즈에 적합한지 균형있게 전략을 세워야 한다.

 

 

 

 

공통 재사용 법칙(Common Reuse Principle, CRP)

 

같이 재사용되는 것을 한데 묶어서 관리한다.

주로 클래스와 모듈을 어느 컴포넌트에 위치시킬지 결정할 때 도움되는 원칙이다.

 

CRP는 어떤 클래스를 한데 묶어도 되는지 보다는, 어떤 클래스를 한데 묶어서는 안되는지에 대해서 이야기 한다.

 

예를 들어서, 강하게 결합되지 않은 클래스들을 동일한 컴포넌트에 위치시키면 안된다고 말한다.

 

인터페이스 격리 원칙 (Interface Segegation Prinicple, ISP)을 패키지까지 확장한 버전이다.

 

아래는 컴포넌트의 응집도에 대한 균형 다이어그램이다.

서로 다른 원칙들이 상충하고 있다. 적절하게 배치하는 전략을 세우자.

 

 

 

 

의존성 비순환 원칙 (Acyclic Dependencies Principles, ADP)

 

컴포넌트 의존성 그래프에 순환(cycle)이 있어서는 안된다는 원칙이다.

 

예를 들어, 모듈 A가 모듈 B에 의존하고, 모듈 B가 모듈 C에 의존하며, 모듈 C가 다시 모듈 A에 의존하는 식의 순환 의존성을 피해야 한다는 것을 말한다.

 

 

만약 순환 의존성이 있으면, 하나의 모듈을 변경할 때 해당 모듈에 의존하는 모든 모듈을 함께 변경해야 할 수 있다.

이런 상황은 코드를 복잡하게 만들고, 유지보수를 어렵게 만들기 때문에 순환 의존성을 피해야 한다.

 

 

이런 상황을 해결하기 위해서 개발 환경을 릴리스 가능한 컴포넌트 단위로 분리시킨다.

컴포넌트가 새로 릴리스되어 사용할 수 있게 되면 다른 팀에서는 새 릴리스를 당장 적용할지를 결정한다.

 

만약, 적용하지 않기로 했다면 그냥 과거 버전의 릴리스를 계속 사용한다.

 

즉, 각자 따로따로 릴리즈를 나눠서 개발하고, 컴포넌트의 의존성 구조가 순환되지 않도록 관리하자.

 

 

 

 

안정된 의존성 원칙 (Stable Dependencies Principles, SDP)

 

더 안정된 방향으로 의존하라는 원칙이다.

여기서 안정성이란, 쉽게 변하지 않는 성질을 말한다.

 

 

위 예시에서 x는 안정된 컴포넌트라고 말한다. 나머지 컴포넌트는 x에 의존하고 있는 모습이다.

의존하고 있는 방향으로 화살표를 그린다.

다른 컴포넌트들이 의존하고 있기 때문에 x는 쉽게 변하면 안된다.

 

y는 불안한 컴포넌트라고 말한다.

하나의 컴포넌트가 여러개의 컴포넌트에 의존하고 있다.

이러한 y는 쉽게 변경될 수 있기 때문에 좋지 않다.

 

 

 

 

안정된 추상화 원칙 (Stable Abstractions Principle, SAP)

 

컴포넌트가 안정된 정도만큼만 추상화 되어야 한다는 원칙이다.

안정된 컴포넌트는 추상 컴포넌트여야 하며, 이를 통해 안정성이 컴포넌트를 확장하는 일을 방해해서는 안된다.

 

아까 컴포넌트 x처럼 의존관계를 많이 받아들이면 안정되어야 하기 때문에 추상적으로 맞춰져야 한다.

즉, 의존관계를 많이 받을수록 안정성과 추상성이 증가한다.