Module Style

|

모듈 스타일

모듈 스타일은 크게 다음 6가지가 존재한다.

  • 분할 스타일: 모듈과 서브 모듈의 구조(포함 관계)를 보여준다.
  • 사용 스타일: 모듈 사이의 기능적 의존성 관계를 나타낸다.
  • 일반화 스타일: 모듈 사이의 특별한 관계를 나타낸다.
  • 레이어 스타일: 레이어 형태로 보여준다.
  • 관점 스타일: 관점이라는 특별한 모듈을 서술한다.
  • 데이터 모델 스타일: 데이터 엔티티 관계를 보여준다.


분할 스타일

모듈과 서브 모듈로서 코드의 구조 및 시스템의 책임의 분할을 보여준다. 거의 모든 아키텍트들이 분할 스타일로 시작한다. 분할 정복(Divide and conquer) 기법을 많이 사용한다.

분할 스타일은 시스템을 구현 단위로 분할하는데 사용된다. 분할 뷰는 모듈과 서브 모듈로 코드의 구성을 기술하며, 시스템의 책임이 어떻게 분할되는지를 보여준다.

분할 스타일에서는 일부분(is part of) 관계를 이용한다. 분할 그래프에서는 반복(loop)은 허용되지 않는다. 모듈은 하나의 부모만 가질 수 있다.

분할 스타일은 모듈 사이의 모든 의존성을 보여주지는 않는다.

분할 스타일의 예시는 다음과 같다.

image


사용 스타일

사용 스타일(Uses style)은 의존(depends on) 관계가 사용하다(use) 관계로 특수화된 결과다. 분할 스타일이 모듈과 서브 모듈로서 구현 단위의 구성을 보여주는 것이라면, 사용 스타일은 모듈이 어떤 다른 모듈을 사용하는지를 보여준다.

사용 스타일의 예시는 다음과 같다.

image

사용 스타일은 인터페이스를 명확하게 보여줄 수도 있다.

사용하다 관계는 호출(call) 또는 불러내기(invoke) 관계와 비슷해보이지만 다르다.


일반화 스타일

일반화 스타일(Generalization style)은 일종(is a) 관계를 사용한다. 부모 모듈과 자식 모듈로 표현하며 공통성(Commonality)과 가변성(Variation)을 보여준다.

일반화는 구현(Implementation) 또는 상속(Inheritance)을 표현할 수 있다.

image

위의 그림처럼 인터페이스의 경우는 두 가지 표기법이 모두 동일하다. 하지만, 좌측의 표기법이 하나의 인터페이스를 여러 모듈들이 구현하는 경우 더 편리하게 표현할 수 있다.


레이어 스타일

레이어 스타일(Layered style)은 레이어 단위로 소프트웨어를 분할 하는 스타일이다. 각 레이어는 밀집성을 갖는 서비스 집합을 표현하며, 레이어간에는 허용(allowed to use) 관계의 제약이 있다. 레이어들의 관계는 엄격하며 단방향으로 이루어진다.

아키텍처에서 가장 일반적으로 사용되는 스타일이다.

하위 레이어에서 상위 레이어를 사용하는 경우는 레이어 스타일이 아니다.

상위 레이어에서 하위 레이어를 건너뛰고 최하위 레이어를 사용하는 경우가 있다. 이때 상위 레이어를 레이어 브릿징(Layer bridging)이라고 한다. 하지만, 이런 사용이 많은 경우 이식성과 변경용이성 관점에서 시스템은 잘못 구조화되었다고 볼 수 있다.

레이어는 소스 코드 검토로 도출되지 않는다. 소스 코드에서는 명확한 경계가 드러나지 않는다. 소스 코드는 사용(use) 관계까지는 드러날 수 있지만, 레이어 스타일에서의 관계는 허용(allowed to use) 관계이기 때문이다.