모듈은 프로그램을 구성하는 구성 요소로, 관련된 데이터와 함수를 하나로 묶은 단위를 의미한다.
보통 하나의 소스 파일에 모든 함수를 작성하지 않고, 함수의 기능별로 따로 모듈을 구성한다. 이러한 모듈을 합쳐 하나의 파일로 작성하는 방식으로 프로그램을 만든다.
위처럼 프로그램 코드를 기능별로 나눠서 독립된 파일에 저장하여 관리하는 방식을 모듈화 프로그래밍이라고 한다.
모듈의 독립성이 높아야 하나의 모듈을 수정하더라도 다른 모듈에게 영향을 주지 않고, 오류가 발생해도 쉽게 발견하고 해결할 수 있다.
모듈의 독립성은 결합도(Coupling)과 응집도(Cohesion)에 의해 측정된다.
독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 한다.
모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
결합도가 약할수록 모듈의 독립성이 높아진다.
자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도
| 종류 | 내용 |
|---|---|
| 자료 결합도 Data Coupling | 모듈간의 인터페이스로 전달되는 파라미터를 통해서만 상호 작용이 일어나는 경우 |
| 스탬프 결합도 Stamp Coupling | 모듈간의 인터페이스로 배열이나 객체, 자료 구조 등이 전달되는 경우 |
| 제어 결합도 Control Coupling | 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하는 제어 요소를 전달하는 경우 |
| 외부 결합도 External Coupling | 어떤 모듈이 외부에 있는 다른 모듈의 데이터를 참조하는 경우 |
| 공통 결합도 Common Coupling | 여러 개의 모듈이 하나의 공통 데이터 영역(전역변수 참조 및 갱신)을 사용하는 경우 |
| 내용 결합도 Content Coupling | 어떤 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 |
모듈의 내부 요소들의 서로 관련되어 있는 정도
응집도가 강할수록 모듈의 독립성이 높아진다.
우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 통신적 응집도 < 순차적 응집도 < 기능적 응집도
| 종류 | 내용 |
|---|---|
| 우연적 응집도 Functional Cohesion | 모듈 내부의 각 구성요소들이 연관이 없을 경우 |
| 논리적 응집도 Sequential Cohesion | 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우 |
| 시간적 응집도 Communication Cohesion | 연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우 |
| 절차적 응집도 Procedural Cohesion | 모듈이 다수 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우 |
| 통신적 응집도 Temporal Cohesion | 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들이 모여있을 경우 |
| 순차적 응집도 Logical Cohesion | 모듈 내에서 한 활동으로부터 나온 출력 값을 다른 활동이 사용할 경우 |
| 기능적 응집도 Coincidental Cohesion | 모듈 내부의 모든 기능이 단일 목적을 위해 수행되는 경우 |