모듈(Module)은 독립된 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는 용어입니다.
모듈의 가장 큰 특징은 독립성을 가지고 있다는 것 입니다. 독립성이 높을 수록 수정에 있어서 다른 모듈에 영향을 주는게 적어지게 됩니다. 이때 모듈의 독립성을 측정하기 위해서는 결합도와 응집도가 이용하면 됩니다. 결합도는 약하고, 응집도는 높고, 모듈의 크기는 작을 수록 독립성이 높아집니다.
그 외의 특징으로는 모듈은 독립적이기 때문에 재사용이 가능하며 모듈 내부에 모듈을 하나로 통합하는 조합이 존재할 수 있습니다.
이런 모듈의 특징을 이용하여 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정 또는 재사용, 유지 관리가 편하도록 기능 단위 모듈로 분해하는 설계 구현 기법을 모듈화(Modularity)라고 합니다.
공통모듈은 소프트웨어 개발에 있어 기능을 분할할 수 있고 추상화를 통한 성능향상과 유지보수를 효과적으로 하기 위한 공통 컴포넌트 구현 기법입니다.
공통 모듈의 독립성을 높이기 위해 결합도는 약하고 응집도는 높이는 구현을 권장합니다.
응집도(Cohesion)는 모듈 내부 구성 요소사이의 연관을 나타냅니다. 즉 응집도는 하나의 모듈이 하나의 기능을 수행하는지를 확인합니다.
응집도는 높을 수록 독립성이 높아지게 되며
우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 통신적 응집도 < 순차적 응집도 < 기능적 응집도 으로 분류됩니다.
즉, 우연적일 수록 응집도가 낮아지며 기능적일 수록 응집도가 높아지며 독립성 또한 높아지게 됩니다.
결합도(Coupling)는 외부 모듈과의 연관도입니다. 즉 소프트웨어 구조의 모듈 사이의 관련성을 측정하는 척도입니다.
결합도가 낮을수록 모듈의 독립성은 높아지게 됩니다.
내용 결합도 > 공통 결합도 > 외부 결합도 > 제어 결합도 > 스탬프 결합도 > 자료 결합도으로 분류되어 있습니다.
내용 결합도 일수록 독립성이 낮아지며 자료 결합도이면 결합도가 낮아지며 모듈의 독립성이 높아집니다.
MVC
공통 모듈을 구현하기 위해서는 반드시 MVC 패턴을 이해해야 합니다.
- 모델(Model): 모델은 내부 비즈니스 로직을 처리하기 위한 역할입니다. 모델에서는 애플리케이션이 무엇을 할 것인지를 정의하게 됩니다.
- 뷰(View): 뷰는 모델과 컨트롤러가 시각적으로 보려주기 위해 보낸 내용들은 화면을 이용해 보여주는 역할입니다.
- 컨트롤러(Controller): 컨트롤러의 역할은 뷰에 명령을 보내 화면 요청 결과를 전달하게 됩니다. 이 전달 결과를 통해 모델이 어떻게 처리해야 할지 알려주고 있습니다.
팬인(Fan-In)과 팬아웃(Fan-Out)
모듈을 계층적으로 분석해 시스템 복잡도를 측정하기 위해 팬인(Fan-In)과 팬아웃(Fan-Out)이 필요합니다.
시스템 복잡도를 최적화 하기 위해서는 팬인이 높아져야 하고 팬아웃이 낮게 설계해야합니다.
다음의 그림을 가지고 팬인(Fan-In)과 팬아웃(Fan-Out)에 대해 알아봅시다.
팬인(Fan-In)은 모듈을 제어 하는 모듈의 수를 의미합니다.
팬인이 높은 경우 재사용하기에는 설계는 잘되었습니다. 그러나 장애점이 발생할 수 있으며 관리비용과 테스트 비용도 증가하게 됩니다.
각 모듈에 대한 팬인을 모두 정리하면 A=0, B=1, C=1, D=1, E=1, F=2, G=1, J=1, H=2, I=1 입니다.
A는 최상위 모듈이여서 어떠한 모듈에 의해서도 컨트롤 되지 않고 있으므로 팬인은 0이됩니다.
H의 경우 상위 모듈인 E와 F에 의해서 제어당하고 있으므로 팬인은 2가 됩니다.
다음으로 알아볼 내용은 팬아웃(Fan-Out)입니다. 팬아웃은 모듈에 의해 제어 되는 모듈의 수입니다.
팬아웃이 높아질 경우 불필요한 모듈 호출되는지 확인하고 단순화 가능한지를 확인해야 합니다.
각 모듈에 대한 팬아웃을 모두 정리하면 A=3, B=2, C=2, D=1, E=1, F=1, G=1, J=0, H=0, I=0 입니다.
가장 높은 팬아웃은 B와 C, D 총 3개의 모듈을 제어하고 있는 A가 됩니다.
또한 가장 팬아웃이 낮은 경우는 모듈의 끝단들인 J와 H, I가 됩니다.
'공부' 카테고리의 다른 글
정보처리기사 PART 5 정리 - 인터페이스 보안과 검증 (0) | 2021.04.19 |
---|---|
정보처리기사 PART 5 정리 - 인터페이스 설계서와 EAI, ESB (0) | 2021.04.18 |
정보처리기사 PART 4 정리 - 개발환경 구축 (0) | 2021.04.18 |
정보처리기사 PART 3 정리 - 통합 구현 (0) | 2021.04.18 |
정보처리기사 PART 2 정리 - 데이터 입출력 (0) | 2021.04.16 |