결합도와 응집도

결합도(Coupling)와 응집도(Cohesion)이란?

결합도와 응집도는 모듈의 독립성을 판단하는 두 가지 지표이다. 결합도는 모듈과 모듈 사이의 의존 정도를 말하고, 응집도는 모듈 내부의 기능적인 집중 정도라고 할 수 있다.

소프트웨어에서는 높은 응집도와 낮은 결합도를 가지도록 지향해야 한다.

결합도(Coupling)

결합도가 높은 클래스의 문제점

결합도가 낮은 클래스의 특징

종류 내용
자료 결합도(Data Coupling) 모듈간 인터페이스로 전달되는 파라미터를 통해서만 상호작용이 일어나는 경우 결합도가 제일 낮고 이상적인 형태이다.
스탬프 결합도(Stamp Coupling) 모듈간의 인터페이스로 배열이나 객체, 자료 구조 등이 전달되는 경우
제어 결합도(Control Coupling) 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하는 제어 요소를 전달하는 경우
외부 결합도 (External Coupling) 어떤 모듈이 외부에 있는 다른 모듈의 데이터를 참조하는 경우 (데이터, 통신 프로토콜 등)
공통 결합도(Common Coupling) 여러 개의 모듈이 하나의 공통 데이터 영역(전역 변수 참조 및 갱신)을 사용하는 경우
내용 결합도 (Content Coupling) 어떤 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우
결합도가 제일 높고 제일 좋지 않은 형태이다.
아래로 향할수록 결합도가 높다고 판단한다.

응집도(Cohension)

응집도는 연관된 코드들이 얼마나 잘 모여있는가를 의미한다. 즉, 모듈 내부 요소들 간의 연관성 정도를 나타내는 척도이며, 이는 특정 프로그램 모듈이 수행하는 작업들이 서로 얼마나, 그리고 어떤 방식으로 연관되어 있는지를 나타낸다.

응집도가 낮은 클래스의 문제점