모듈
- 단독으로 컴파일 가능
- 재사용
- 서로 독립적
- 다른 모듈과의 과도한 상호작용 배제
- 오류 발생 시 쉽게 발견 및 해결
- 독립성 ↑ : 결합도 ↓, 응집도 ↑, 크기 ↓
결합도 (Coupling)
- 두 모듈 사이의 연관 관계
- 결합도가 강할수록 품질이 낮음
- 결합도가 강할수록 시스템 구현 및 유지보수 작업 어려움
자료 결합도 (Data)
- 모듈 간 인터페이스가 자료 요소로만 구성
- 매개변수나 인수로 데이터 넘겨주고, 처리결과를 다시 돌려주는 방식
- 모듈 간 내용 알 필요 없음
스탬프 결합도 (Stamp)
- 자료구조가 전달 될 때
- 두 모듈이 동일한 자료구조 조회하는 경우
제어 결합도 (Control)
- 제어 요소를 전달하는 결합도
- 권리 전도현상 발생 (하위 모듈이 상위 모듈에게 처리명령)
외부 결합도 (External)
- 외부의 다른 모듈에서 참조할 때
- 참조되는 범위 각 모듈에서 제한 가능
공유 결합도 (Common)
- 공유되는 데이터 영역을 여러 모듈이 사용할 때
- 서로 사용하기에 수정하더라도 모든 모듈에 영향
내용 결합도 (Content)
- 다른 모듈의 내부 자료를 참조 및 수정할 때
- 다른 모듈의 내부로 제어가 이동할 때
※ 결합도 낮은 순서
자료 -> 스탬프 -> 제어 -> 외부 -> 공유 -> 내용
말도 안되는 방법으로 순서 외우기
(자료를 조사하고 스탬프를 찍어 제어하고 외부에서 공통적인 내용을 결합)
응집도 (Cohesion)
- 정보 은닉 개념을 확장
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 모듈이 독립적인 기능으로 정의되어 있는 정도
- 응집도 강할수록 품질이 높다.
기능적 응집도 (Functional)
- 모든 기능 요소들이 단일 문제와 연관되어 수행할 경우
순차적 응집도 (Sequential)
- 출력 데이터를 다음 활동의 입력 데이터로 사용할 경우
교환적 응집도 (Communication)
- 동일한 입력, 출력 사용하여 서로 다른 기능 수행할 경우
절차적 응집도 (Procedural)
- 모듈 안의 구성요소들이 기능을 순차적으로 수행할 경우
시간적 응집도 (Temporal)
- 특정 시간에 몇 개의 기능을 모아 하나의 모듈로 작성할 경우
논리적 응집도 (Logical)
- 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우
우연적 응집도 (Coincidental)
※ 응집도 강한 순서
기능적 -> 순차적 -> 교환적 -> 절차적 -> 시간적 -> 논리적 -> 우연적
말도 안되는 방법으로 순서 외우기
(기능을 순차적으로 교환하고 절차적으로 시간 안에 논리적이고 우연적이지 않게 응집한다.)
팬인 & 팬아웃
- 시스템 복잡도를 최적화하려면 팬인↑, 팬아웃↓설계
ex) 각 모듈의 팬인, 팬아웃의 수는?
쉽게 모듈의 위는 팬인, 모듈의 아래는 팬아웃이라고 생각하면 된다.
더보기
팬인
A : 0
B, C, D, F : 1
E, G : 2
팬아웃
A : 3
B, C : 2
F : 1
D, E, G : 0