결합도
보이기
소프트웨어 공학에서 결합도(coupling) 또는 의존도는 어떤 모듈이 다른 모듈에 의존하는 정도를 나타내는 것이다.
결합도는 보통 응집도(cohesion)과 대비된다. 낮은 결합도는 종종 높은 응집도와 관련이 있으며, 그 역도 마찬가지이다. 결합도과 응집도라는 소프트웨어 측정 지표(software metric)은 구조적 설계의 개발자인 래리 콘스탄틴(en:Larry Constantine)이 만들었으며, [1] 또한 그는 이러한 개념의 초기 지지자였다.(같이 보기: 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)
- 모듈이 어떠한 다른 모듈과도 통신하지 않는 경우이다.
같이 보기
[편집]각주
[편집]- ↑ W. Stevens, G. Myers, L. Constantine, "Structured Design", IBM Systems Journal, 13 (2), 115-139, 1974.