모듈의 독립성을 판단하는 지표이다.
결합도 : 모듈과 모듈간의 상호 의존 정도
응집도 : 모듈 내부의 기능적인 집중 정도
좋은 모듈화는 용도에 맞게 잘 구분된 기능을 가진 모듈들로 세분화하는 것이다.
개별 모듈은 독립적으로 자신에게 주어진 기능만 수행하고 명확한 결과를 내놓아야하고
다른 모듈에 의존성이 높아선 안된다.
결합도는 낮을수록 / 응집도는 높을수록 이상적인 모듈화
결합도
어떤 모듈이 다른 모듈에 의존하는 정도
독립적인 모듈 => 결합도가 약하다
결합도의 종류
자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도
자료 결합도(Data Coupling)
모듈간 인터페이스 전달되는 파라미터를 통해서만 모듈간의 상호 작용이 일어나는 경우
▶ 단순자료만 매개변수로 전달, 참조
스탬프 결합도(Stamp Coupling)
모듈간 인터페이스 배열이나 오브젝트, 스트럭쳐등이 전달되는 경우
▶ 자료구조(배열, 리스트, 객체 등)를 매개변수로 전달, 참조
제어 결합도(Control Coupling)
처리할 대상 값만 전달되는 것이 아니라 어떻게 처리를 해야한다는 제어 요소(Flag)가 전달되는 경우
▶ 논리적 흐름을 제어하기 위한 제어 플래그나 정보를 전달
외부 결합도(External Coupling)
어떤 모듈에서 반환한 값을 다른 모듈에서 참조해서 사용하는 경우
▶ 외부 환경(특수 H/W, 통신 프로토콜, OS, 컴파일러 등)과 연관된 경우
공통 결합도(Common Coupling)
파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역변수를 갱신하는 식으로 상호작용하는 경우
▶ 두 모듈이 같은 전역변수를 공유하는 경우
내용 결합도(Content Coupling)
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용 하는 경우
▶ 한 모듈이 다른 모듈의 내부 기능 및 자료를 직접 참조하는 경우
응집도
하나의 모듈이 하나의 기능을 수행하는 요소들간의 연관성 척도
독립적인 모듈 => 응집도가 강하다
응집도의 종류
우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 교환적 응집도 < 순차적 응집도 < 기능적 응집도
기능적 응집도(Functional Cohension)
모든 기능이 단일한 목적을 위해 수행되는 경우
▶ 모듈 내 모든 요소들이 단일 기능을 수행
순차적 응집도(Sequential Cohension)
한 활동으로 부터 나온 출력값을 다른 활동이 사용할 경우
▶ 모듈 내의 한 요소의 출력 자료가 다음 요소의 입력 자료로 사용
교환적 응집도(Communication Cohension)
동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
▶ 모듈 내의 요소들이 동일한 입출력 자료로 서로 다른 기능을 수행
절차적 응집도(Procedural Cohension)
다수의 관련 기능을 가질 떄 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우
▶ 모듈 수행 요소들이 반드시 특정 순서대로 수행
시작적 응집도(Temporal Cohension)
연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
▶ 특정 시간에 실행되는 기능들을 모아 작성된 모듈
논리적 응집도(Logical Cohension)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
▶ 논리적으로 유사한 기능을 수행 하지만 서로의 관계는 밀접하지 않음
우연적 응집도(Coincidental Cohension)
각 구성요소들이 연관이 없을 경우
▶ 모듈 내 요소들이 뚜렷한 관계가 없이 존재