본문 바로가기
공부/TIL•기타

결합도 / 응집도

by svcbn 2024. 10. 7.

08/22

 

결합도 (Coupling)

결합도는 모듈과 모듈 간의 상호 의존성을 나타내는 정도이다.
이상적인, 독립적인 모듈일수록 결합도는 낮아야 한다.

결합도가 높은 class의 문제점은,

  • 연관된 다른 class가 변경되면 같이 변경 해줘야 한다.
  • class를 이해하기 위해, 연관된 다른 class도 함께 이해해야 한다.
  • class의 재사용이 힘들다.

결합도가 낮은 class의 특징은,

  • OCP(Open Close Principle)의 원칙을 지킨다. 확장에는 개방되고, 변경에는 폐쇄되어야 함.
  • 다형성이 좋다.

 

결합도의 종류

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

 

 

응집도 (Cohesion)

응집도는 모듈 내부의 기능적인 응집 정도를 나타낸다.
정보 은닉의 확장 개념으로, 하나의 모듈은 하나의 기능을 수행하는 것을 의미.
독립적인 모듈이 되기 위해서는 응집도가 높아야 함.

응집도가 낮은 class의 문제점은,

  • 이해하기 힘들다.
  • 재사용과 유지보수가 어려움.
  • 다른 class의 변화에 민감하다.

응집도가 높은 class의 특징은,

  • 단일 책임을 가진 class.
  • 다른 class와 잘 협력할 수 있는 class.

 

응집도의 종류

  • 기능적 응집도 (Functional Cohesion)
    모듈 내부의 모든 기능이 단일 목적을 위해 수행되는 경우.
    응집도가 제일 높고 제일 좋은 형태.
  • 순차적 응집도 (Sequential Cohesion)
    모듈 내의 활동으로부터 나온 출력 값을 다른 활동이 사용할 경우.
  • 교환적 응집도 (Communication Cohesion)
    동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들이 모여있을 경우.
  • 절차적 응집도 (Procedural Cohesion)
    모듈이 다수 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우.
  • 시간적 응집도 (Temporal Cohesion)
    연관된 기능이라기보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우.
  • 논리적 응집도 (Logical Cohesion)
    유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우.
  • 우연적 응집도 (Coincidental Cohesion)
    모듈 내부의 각 구성요소들이 연관이 없을 경우.
    응집도가 제일 낮고 제일 좋지 않은 형태.

 

 

정리

결합도와 응집도는 모듈의 독립성을 판단하는 두 가지 지표.

결합도 : 모듈과 모듈 사이의 의존 정도.
응집도 : 모듈 내부의 기능적인 집중 정도.

이상적인 모듈화는, 독립적으로 주어진 기능만을 수행함과 더불어 명확한 결과값을 내고, 다른 모듈에 의존해서는 안됨.
즉, 결합도는 낮을수록, 응집도는 높을수록 이상적인 모듈화.

'공부 > TIL•기타' 카테고리의 다른 글

Node.js 란?  (0) 2024.10.17
.ini  (0) 2024.10.07
TDD(테스트 주도 개발)  (7) 2024.09.14
Method Chaining  (0) 2024.09.08
07/29  (0) 2024.08.26