응집도와 결합도는 모듈의 독립성을 판단하는 두 가지 지표이다.
응집도는 높을수록 좋고 결합도는 낮을수록 이상적이다.
응집도
응집도란 모듈 내부의 요소들의 밀접 정도를 나타내는 척도를 말한다.
- 응집도는 높을수록 좋음
- 종류로는 우논시절통순기
종류
우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 통신적 응집도 < 순차적 응집도 < 기능적 응집도
- 기능적 응집도(Functional Cohesion)
- 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우
- 순차적 응집도(Sequential Cohesion)
- 모듈 내의 한 활동으로부터 나온 출력값을 모듈 내의 다른 활동이 사용할 경우
- 통신적 응집도(Communicational Cohesion)
- 서로 다른 기능을 수행하지만 동일한 입력과 출력을 사용하는 활동들이 모여있을 경우
- 절차적 응집도(Procedural Cohesion)
- 모듈 안의 구성요소들이 서로 다른 기능을 하지만 그 기능을 순차적으로 수행할 경우
- 시간적 응집도(Temporal Cohesion)
- 연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
- 논리적 응집도(Logical Cohesion)
- 실제와 달리 논리적으로만 같은 그룹으로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
- 우연적 응집도(Coincidental Cohesion)
- 모듈 내부의 각 구성요소들이 연관이 없을 경우
결합도
결합도란 모듈과 모듈 간의 상호 의존 정도를 나타내는 척도를 말한다.
- 결합도는 낮을수록 좋음
- 종류로는 내공외제스자
종류
자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도
- 자료 결합도(Data Coupling)
- 모듈간의 인터페이스로 전달되는 파라미터를 통해서만 모듈간의 상호 작용이 일어나는 경우
- 깔끔한 Call by value
- 스탬프 결합도(Stamp Coupling)
- 모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐등이 전달되는 경우
- 제어 결합도(Control Coupling)
- 단순히 처리를 해야할 대상인 값만 전달되는게 아니라 어떻게 처리를 해야 한다는 제어 요소(DCD, Flag등)이 전달되는 경우.
- 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우이며, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도현상이 발생하게 됨.(정처기 20년 3회 기출)
- 외부 결합도(External Coupling)
- 어떤 모듈에서 반환한 값을 다른 모듈에서 참조해서 사용하는 경우
- 공통 결합도(Common Coupling)
- 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역변수를 갱신하는 식으로 상호작용하는 경우
- 내용 결합도(Content Coupling)
- 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용 하는 경우
예시
Member 객체 전체를 넘기는데 실제로 name 하나만 사용한다면 → 스탬프 결합도
printMember(member);필요한 값만 넘김 → 자료 결합도
printMember(member.getName());true 값에 따라 상대 모듈의 동작 방식을 결정한다면 → 제어 결합도
process(true);