Seongwon Lim

[OOAD] 결합도(Coupling) & 응집도(Cohesion) 본문

OOAD

[OOAD] 결합도(Coupling) & 응집도(Cohesion)

limsw 2022. 7. 3. 17:53
반응형

서론

소프트웨어 공학에서 모듈을 설계할 때에는 모듈의 독립성을 높은 수준으로 구현하여야 한다.

  • 모듈(Module) : 시스템의 독자적인 기능으로 소프트웨어 성능 향상 및 재사용성을 높이기 위해 기능 단위로 분해한 것
  • 모듈의 독립성을 높여야 하는 이유는 모듈의 정의와 같이 성능, 재사용성, 수정 용이성 등을 보장하기 위함이다.

또한, 모듈을 설계할 때에는 모듈 간 의존성모듈 내부 기능들이 기능적으로 잘 뭉쳐져 있는 지를 확인하며 설계할 필요가 있으며 해당 내용들을 만족하여야 독립성 있는 모듈을 구현할 수 있다.

 

그래서 이번 글에서는 위에서 언급한 2가지 내용인 모듈 설계 시 필요한 결합도(Coupling), 응집도(Cohesion)의 개념과 종류를 간단하게 살펴보고자 한다.

결합도 (Coupling) 개념

결합도란 모듈이 다른 모듈에 의존하는 정도를 나타내는 것으로, OO 시스템에서 결합도는 낮을수록 좋은 설계를 한 것으로 볼 수 있다.

객체 지향 시스템에서 각 객체들은 그들 간의 상호작용을 통해 요구사항을 충족한다. 그러나 만약 객체 간 결합도(의존도)가 높으면 특정 객체가 변경되었을 때 다른 객체에 영향을 끼치게 된다.

 

물론, 객체들 사이의 의존성이 완전히 없을 수는 없지만 불필요한 결합을 배제하여 모듈 간 낮은 의존성을 유지함으로써 재사용성을 높일 수 있다. 또한, 모듈 간 의존성을 낮은 수준으로 유지하게 된다면 특정 모듈이 변경되었을 때 해당 모듈과 의존성이 있는 모듈만 수정하면 되기 때문에 유지보수성을 향상시킬 수 있다.

결합도 (Coupling) 종류

결합도 종류 의미
Low Coupling 자료 결합도 (Data Coupling) 모듈간의 인터페이스로 전달되는 파라미터(자료 요소)를 통해서만 모듈간의 상호 작용이 일어나는 경우
스탬프 결합도 (Stamp Coupling) 모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐(자료 구조) 등이 전달되는 경우
제어 결합도 (Control Coupling) 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호(DCD, Flag)를 이용하여 통신하는 경우
외부 결합도 (External Coupling) 특정 모듈에서 선언한 변수를 외부의 다른 모듈에서 참조하는 경우
공유 결합도 (Common Coupling) 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고, 전역 변수를 갱신하는 식으로 상호작용 하는 경우
High Coupling 내용 결합도 (Content Coupling) 특정 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우

응집도 (Cohesion) 개념

응집도는 모듈 내부의 기능적인 응집 정도를 의미하며 쉽게 설명하면 특정 모듈들이 독립적인 기능으로 구성되어 있는지를 나타내는 것이다. 모듈은 독립성을 보장하는 것이 목표이므로 응집도가 강할수록 독립적인 모듈을 설계했다고 할 수 있다.

 

응집도가 높으면 특정 모듈은 자신이 부여 받은 역할을 충족시키기 위해 다른 모듈을 참조하는 일이 적어지기 때문이다.

결과적으로 다른 모듈을 참조하는 일이 적어지면 모듈 간 의존성도 낮추는 것이므로 Low Coupling을 동시에 충족할 수 있다.

응집도 (Cohesion) 종류

결합도 종류 의미
High Cohesion 기능적 응집도 (Functional Cohesion) 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우
순차적 응집도 (Sequential Cohesion) 모듈 내의 한 활동으로부터 나온 출력값을 모듈 내의 다른 활동이 사용하는 경우
교환적 응집도 (Communication Cohesion) 서로 다른 기능을 수행하지만 동일한 입력과 출력을 사용하는 활동들이 모여있는 경우
절차적 응집도 (Procedural Cohesion) 모듈 안 구성요소들이 서로 다른 기능을 하지만 그 기능을 순차적으로 수행하는 경우
시간적 응집도 (Temporal Cohesion) 연관된 기능은 아니지만 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
논리적 응집도 (Logical Cohesion) 실제와 달리 논리적으로만 같은 그룹으로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
Low Cohesion 우연적 응집도 (Coincidental Cohesion) 모듈 내부 구성요소들이 서로 관련 없는 요소로 구성되어 있는 경우

 

Comments