결합도

소프트웨어 공학에서 결합도(coupling) 또는 의존도는 어떤 모듈이 다른 모듈에 의존하는 정도를 나타내는 것이다.

결합도는 보통 응집도(cohesion)과 대비된다. 낮은 결합도는 종종 높은 응집도와 관련이 있으며, 그 역도 마찬가지이다. 결합도과 응집도라는 소프트웨어 측정 지표(software metric)은 구조적 설계의 개발자인 래리 콘스탄틴(:en:Larry Constantine)이 만들었으며,
 또한 그는 이러한 개념의 초기 지지자였다.(같이 보기: SSADM) 낮은 결합도는 종종 구조화가 잘 된 컴퓨터 시스템의 지표이며, 좋은 설계이며, 높은 응집도를 겸비하면, 높은 가독성과 유지보수성이라는 일반적인 목표를 이루게 된다.

결합도의 종류 

결합도는 "낮아질"(또는 "약해질") 수도 "높아질"(또는 "강해질") 수도 있다. 높은 것부터 낮은 것의 순서로, 결합도를 나열하면 다음과 같다.

절차적 프로그래밍 
절차적 프로그래밍에서, 모듈은 서브 루틴(예: 하나의 이름을 가지는 문장들(statements))을 가리킨다.

내용 결합도(높음) 내용 결합도(Content coupling 또는 Pathological coupling)는 하나의 모듈이 다른 모듈의 내부 동작을 수정하거나 내부 동작에 의존하는 상태이다.(예: 다른 모듈의 로컬 데이터에 접근하는 경우)
따라서 한 모듈이 데이터를 생성하는 방법(위치, 타입, 타이밍)을 변경하면, 다른 모듈의 변경이 필요하다.

공통 결합도 공통 결합도(Common coupling 또는 Global coupling)는 두 개의 모듈이 같은 글로벌 데이터를 공유하는 상태이다.(예: 전역 변수)
공유 자원(변수)를 변경하면, 그 자원(변수)를 사용하는 모든 모듈의 변경이 필요하다.

외부 결합도 외부 결합도(External coupling)는 두 개의의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 때 발생한다. 이는 기본적으로 외부 툴이나 디바이스와의 통신과 관련이 있다.

제어 결합도 제어 결합도(Control coupling)은 하나의 모듈이 다른 모듈으로 무엇을 해야하는지에 대한 정보를 넘겨줌으로써 다른 모듈의 흐름을 제어하는 경우이다.

스탬프 결합도 스탬프 결합도(Stamp coupling 또는 Control coupling)는 모듈들이 데이터 구조를 공유하고, 그 서로 다른 일부만을 사용하는 경우이다.
접근할 필요가 없는 필드만 수정되는 경우에도 (데이터의 배치가 변경되므로), 레코드(필드)를 읽는 방법을 변경해야 한다.

자료 결합도자료 결합도(Data coupling)는 모듈들이 파라메터 등을 통해 데이터를 공유하는 경우이다. 각 데이터가 기본적인 것(elementary piece)이고, 그 데이터들이 공유되는 유일한 데이터이여야 한다. (예, 제곱근을 계산하는 함수로 하나의 정수를 전달하는 경우)

메시지 결합도(Message coupling)(낮음) 가장 낮은 결합도이다. 이는 state decentralization을 통해 이룰 수 있고, 컴포넌트 간의 통신은 파라메터나 메시지 패싱을 통해 이루어져 한다.

결합도 없음(No coupling) 모듈이 어떠한 다른 모듈과도 통신하지 않는 경우이다.

참고 자료 

소프트웨어 구조
객체 지향 프로그래밍