모듈화
소프트웨어 공학의 원리 중 가장 근간이 되는 개념
모듈화 원리를 적용하여 얻는 이점
- 모듈화된 소프트웨어는 이해하기 쉽다.
- 변경에 의한 수정 사항 반영이 쉽다.
- 재사용 가능성이 높아짐
- 팀 단위 개발 작업이 쉬어짐
- 추적성이 높아진다.
결합력(coupling)
모듈 간의 의존성 관계, 결합력이 작을수록 좋은 설계

모듈간의 결합력을 최소화 할 때의 장점
- 시스템의 구성 요소 간에 결합이 느슨해짐
- 변경에 의한 파동 효과를 막을 수 있음
- 소프트웨어에 대한 이해도를 높임
- 모듈의 인터페이스가 단순해짐
메시지 결합력(Message Coupling)
- 결합의 정도가 가장 느슨한 유형
- 객체 간 상호작용은 메시지전달이라는 한 가지 개념에 의해서만 이루어짐
자료 결합력(Data Coupling)
두 모듈이 단순한 기본 데이터 타입을 갖는 변수들에 의해 상호작용하는 경우
스탬프 결합력(Stamp Coupling)
두 모듈이 구조체와 같은 복합 데이터를 이용하여 상호작용함
제어 결합력(Control Coupling)
한 모듈에서 다른 모듈로 매개변수를 전달할 때, 그 매개변수가 호출되는 함수의 내부 행위를 제어하는 역할
외부 결합력(External Coupling)
두 모듈이 외부에 존재하는 다른 정보를 공유하고 있음
공유 결합력(Common Coupling)
두 모듈이 광역 변수를 공유하고 있음
내용 결합력(Content Coupling)
한 모듈에서 다른 모듈의 내부를 직접 참고함
응집력(Cohesion)
모듈을 구성하는 내적 요소 간의 기능적 관련성의 강도를 측정하는 척도
모듈을 구성하는 내적 요소
명령어, 변수 정의, 함수 호출 등
기능 응집력(Fuctional Cohesion)
모듈을 구성하는 모든 요소가 단지 하나의 기능을 구현하기 위해 구성된 경우
순차 응집력(Sequentail Cohesion)
한 문장의 실행 결과가 다음 문장의 입력으로 사용되는 경우
통신(교환) 응집력(Communicational Cohesion)
모듈을 구성하는 모든 요소가 동일한 입력 또는 출력을 사용하는 경우
절차 응집력(Procedural Cohesion)
모듈의 문장들이 의미상 서로 관련이 없지만 제어 흐름의 순서가 있는 경우
시간 응집력(Temporal Cohesion)
모듈의 모든 요소가 처리되는 시간과 관련성이 있는 경우
논리 응집력(Logical Cohesion)
모듈의 모든 요소가 논리적으로 같은 유형의 외부 동작들로 구성되는 경우
우연 응집력(Coincidental Cohesion)
가장 나쁜 형태의 응집력, 모든 요소가 아무런 관련성이 없는 것으로 묶인 경우

좋은 설계
결합력(coupling)이 낮고 응집력(cohesion)은 높은 모듈 구성으로 이루어진 설계