소프트웨어 공학/소프트웨어 아키텍처

결합도(Coupling)

투칼론 2016. 9. 8. 22:17
반응형

1. 개요


결합도(Coupling)는 소프트웨어 모듈 간의 독립성 정도를 나타낸다. 두 루틴 또는 모듈 간의 얼마나 관련성있게(closly) 연결되었고, 얼마나 관련성이 강한지(strong)를 측정한다.


결합도(Coupling)은 응집도(Cohesion)와 대조된다. 낮은 결합도(low coupling)는 높은 응집도와 상관관계가 있다.  낮은 결합도는 잘 구조화된 컴퓨터 시스템과 디자인이 잘 됨을 의미한다.

높은 응집도(high cohesion)과 낮은 결합도가 엮어 가독성이 좋고, 유지보수가 용이한 목표이다.

 

또한 모듈간의 연관성을 의미하는 것으로 좋은 설계가 이루어지도록 하기 위해서는 가능한 한 모듈을 독립적으로 생성함으로써 결합도를 최소화(낮게)하는 것이다. 

결합도가 낮다는 것은 하나의 시스템을, 서로 관계가 적으면서 독립된 기능을 수행하는 모듈로 잘 분할했음을 의미한다.


낮은 결합도의 이점은 모듈간의 상호 작용이 적으므로 한 모듈에서 발생한 오류가 다른 모듈에 영향을 미치게되는 파급 효과를 줄일 수 있다. 

한 모듈의 변경이 다른 모듈에 큰 영향을 미치지 않으므로 유지보수 작업을 국부적(부분적)으로 수행할 수있게 된다.


2. 결합도 유형(Type)

[그림출처] wikipedia


1) 내용(content) 결합도 - 한 모듈이 다른 모듈의 내부 기능이나 자료를 참조하는 경우 발생하는 것이다. 예를 들어 한 모듈의 제어가 다른 모듈 내부로 분기하는 경우로 모듈이라는 개념은 무시된다.


2) 공통(common) 결합도 - 공통 결합은 하나의 기억 장소에 공동의 자료 영역을 설정한 후 한 모듈이 그 기억 장소에 자료를 전송하면 다른 모듈은 기억 장소를 조회함으로써 정보를 전달받는 방식을 취할 때 발생한다. 이때 공동 장소의 자료에 오류가 발생하면 그 장소를 사용 하는 모든 모듈에 오류가 파급된다. 따라서 이런 모듈은 재사용이 어렵고 유지보수가 힘들다.


3) 제어(control) 결합도 - 어떤 모듈이 다른 모듈 내부에서 작용하는 논리적 흐름을 제어하기 위하여 제어용 신호 (flag)나 정보를 보내는 경우이다. 예를 들어 하위 모듈이 상위 모듈에게 무엇을 하라고 지시하는 경우이다. 이는 두 모듈을 독립된 모듈로 인정하는 것이 아니므로 좋은 설계라고 볼 수 없다.


4) 구조(stamp) 결합도 - 두 모듈이 동일한 자료 구조-배열, 레코드 등-를 참조하는 경우에 발생하는 결합이다. 이때는 한 레코드 또는 배열 중 사용되지 않은 항목들도 포함될 수도 있으므로 주의해야 한다.


5) 자료(data) 결합도 - 두 모듈 간에 매개변수를 전달하는 경우에 발생하는 것으로 모듈간에 필요한 자료만 가지고 통신(전달)하도록 결합된 경우이다.