CS/software engineering

결합도와 응집도에 대하여 (Coupling and Cohension)

superbono 2021. 6. 26. 23:14

스프링을 공부하다 보니 결합도와 응집도에 대해서 얘기가 나오고,

결합도는 낮추고 응집도(응집력)은 높여야 한다 라는 말이 자주 등장하여 둘의 개념을 자세히 정리하고자 포스팅을 한다.

 

* 모듈이란 무엇인가?

소프트웨어를 기능 별로 나누는 것을 모듈화,

모듈화의 결과로 기능 별로 분할된 것을 모듈이라고 한다.

 

모듈화의 장점

  • 시스템의 이해가 쉽다.
  • 시스템의 유지 관리가 용이하다.
  • 재사용이 가능하다.

 

빨간 선은 결합도를, 파란 선은 응집도를 나타낸다.  

 

* 결합도(Coupling) 

모듈 간의 관계(inter-module)를 나타낸다. 모듈과 모듈 간의 상호 의존도를 이야기한다. 낮은 결합도를 가지는 것을 권장한다. 

 

 

메시지 결합도 (가장 낮은 결합도)

컴포넌트간의 통신이 파라메터나 message passing을 통해서 이루어진다. 

자료 결합도

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

스탬프 결합도(또는 control coupling)

모듈들이 데이터 구조를 공유하고, 서로 다른 일부만들 사용하는 경우이다. 접근할 필요가 없는 필드만 수정되는 경우에도, 레코드를 읽는 방법을 변경해야 한다.

제어 결합도

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

외부 결합도

두 개의의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 때 발생한다.

공통 결합도

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

내용 결합도 (가장 높은 결합도)

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

 

* 응집도(Cohension)

모듈 내 관계(intra-module)를 나타낸다. 모듈 내부의 기능적인 집중도를 이야기한다. 소프트웨어에는 높은 응집력을 갖추는 것이 권장한다.

 

 

결합도가 높은 클래스의 단점

  • 연관된 다른 클래스가 변경되면 더불어 변경이 필요하다.
  • 다른 프로그램에서 클래스 재사용이 어렵다.
  • 수정하려는 클래스를 이해하기 위해서 연관된 클래스를 함께 이해해야 한다.

 

응집도가 낮은 클래스의 단점

  • 코드를 이해하기 어렵다. 
  • 유지보수가 어렵다.
  • 다른 클래스의 변화에 민감하다.

 

 

출처 - https://ko.wikipedia.org/wiki/%EA%B2%B0%ED%95%A9%EB%8F%84

 

결합도 - 위키백과, 우리 모두의 백과사전

소프트웨어 공학에서, 결합도(coupling) 또는 의존도는 어떤 모듈이 다른 모듈에 의존하는 정도를 나타내는 것이다. 결합도는 보통 응집도(cohesion)과 대비된다. 낮은 결합도는 종종 높은 응집도와

ko.wikipedia.org

https://devuna.tistory.com/66

 

[소프트웨어공학] 모듈, 결합도와 응집도- 좋은 소프트웨어 설계의 시작

[소프트웨어공학] 모듈, 결합도와 응집도- 좋은 소프트웨어 설계의 시작 1. 모듈과 모듈화 먼저 모듈화란 소프트웨어를 각 기능별로 나누는 것을 의미한다. 그리고 그 결과로 각 기능별로

devuna.tistory.com

 

'CS > software engineering' 카테고리의 다른 글

Agile 애자일  (0) 2021.07.12
CI/CD  (0) 2021.07.03
3rd party(써드 파티)란?  (0) 2021.06.19
라이브러리 vs 프레임워크  (0) 2021.05.01
MVC  (0) 2021.04.05