모듈화(Modularization)
모듈(Module)
💡 이상적인 모듈화
결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게
서로 다른 모듈 간 상호 의존하는 정도 또는 두 모듈 사이의 연관된 관계
구분 | 설명 |
---|---|
자료 결합도 (Data Coupling) | ◾ 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우 ◾ 순수한 자료형 요소 |
스탬프 결합도 (Stamp Coupling) | ◾ 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우 ◾ 자료 구조의 형태 변경 시 참조하고 있는 모든 모듈에 영향 미침 ◾ 변경되는 필드를 실제로 참조하지 않는 모듈에도 영향 미침 |
제어 결합도 (Control Coupling) | 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달되는 경우 ex) 파라미터로 전달되는 값에 따라 모듈 내부 로직이 처리가 달라지는 Flag 값 등으로 결합 |
외부 결합도 (External Coupling) | ◾ 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성들이 그 기능을 순차적으로 수행할 경우 ◾ 특수한 외부환경에 종속 또는 연관되어있는 경우 ex) 외부의 데이터, 통신 프로토콜 등을 공유할 때 ◾ 참조되는 데이터의 범위가 각 모듈에서 제한 |
공통 결합도 (Common Coupling) | 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 갱신하는 식으로 상호작용하는 경우 |
내용 결합도 (Content Coupling) | 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 |
💡 참고
- 변경될 가능성이 적은 모듈의 경우, 결합도가 높아도 문제가 되지 않을 수 있음
ex1) 표준 라이브러리에 포함된 모듈
ex2) 성숙 단계에 접어든 모듈에 의존하는 경우- 그러나 모듈간 변화의 영향과 의존성을 낮추고 재사용성을 높이기 위해 결합도를 낮게 유지시키는 것이 좋음
모듈 내부에서 구성 요소 간에 밀접한 관계를 맺고 있는 정도
구분 | 설명 |
---|---|
기능적 응집도 (Functional Cohesion) | 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우 ex) 코사인(cosine)과 같은 삼각함수를 계산하는 기능을 모아둔 함수 |
순차적 응집도 (Sequential Cohesion) | 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동에 사용할 경우 ex) 어떤 모듈이 특정 파일을 읽어와 처리하는 기능 |
통신적 응집도 (Communication Cohesion) | 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있는 경우 |
절차적 응집도 (Procedural Cohesion) | 모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행하는 경우 ex) 파일을 읽을 때 접근 허가를 확인한 후 파일을 읽음 |
시간적 응집도 (Temporal Cohesion) | 연관된 기능이라기보다는 특정 시점에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우 ex1) 프로그램 구동 시 초기화 시키는 모듈 ex2) 예외 상황 발생 시 오류 로그를 개발자에게 전송 |
논리적 응집도 (Logical Cohesion) | 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우 |
우연적 응집도 (Coincidental Cohesion) | 모듈 내부의 각 구성 요소들이 연관이 없는 경우 |
💡 주의
응집도가 높을 수록 복잡도가 감소하나, 다음과 같은 이슈가 발생할 수 있음
- 서로 다른 코드를 하나의 모듈에 몰아 넣고, 그 중 하나의 코드를 변경해야 하는 경우
→ 모듈 내 변경할 필요가 없는 코드까지 수정해야 할 수 있음- 하나의 모듈에 수정해야 할 코드가 모여있지 않고 엉뚱한 곳에 코드가 모여있는 경우
→ 여러 가지가 얽혀있게되므로 코드 수정이 어려워짐
팬인/팬아웃을 분석하여 프로그램의 복잡도를 조절할 수 있음
자신을 사용하는 타 모듈의 수
자신이 호출하는 타 모듈의 수
모듈 | 팬인 | 갯수 | 팬아웃 | 갯수 |
---|---|---|---|---|
A | 없음 | 0 | B, C, D | 3 |
B | A | 1 | E, H | 2 |
C | A | 1 | F, G, J | 3 |
D | A | 1 | J | 1 |
E | B | 1 | H | 1 |
F | C | 1 | 없음 | 0 |
G | C | 1 | I | 1 |
H | B, E | 2 | 없음 | 0 |
I | G, J | 2 | 없음 | 0 |
J | C, D | 2 | I | 1 |
📖 참고
- 남궁일주, 김재환, 성중안, 남궁영 공저(2020). 정보처리기사 필기 기본서(1판). 서울: 영진닷컴.
- 결합도와 응집도는 무엇일까?
- [SW공학] 결합도(Coupling)와 응집도(Cohesion)
- [소프트웨어공학] 모듈, 결합도와 응집도- 좋은 소프트웨어 설계의 시작
- [설계 용어] 응집도(Cohesion)와 결합도(Coupling)