CS

[SW공학] 결합도(Coupling)와 응집도(Cohesion)

창문닦이 2020. 6. 14. 22:30

모듈 간의 결합도는 최소화하고 모듈 내 요소들 간의 응집력을 최대화한다는 것을 SW공학에서 배웠다. 전공 이론을 그저 암기하다가 코드를 작성하면서 왜 모듈화를 하고 모듈을 설계할 때에 결합도와 응집도를 왜 고려해야 하는지 기본 이론을 복습하다 보니 난 이렇게 설계하고 있나? 현타가 왔다.  성능 좋고 유지보수 용이한 서비스를 만들기 위해서 좋은 모듈을 설계할 줄 아는 개발자가 되자.

 

모듈화(Modularization)

전체 프로그램을 한 번에 설계하지 않고 단일 기능을 갖출 수 있도록 부분적으로 묶어서 처리하는 기술이다. 단위 프로그램, 함수, 서브 프로그램을 작성하기 위한 설계 기법이다.

 

모듈화의 장단점

장점 : 프로그램의 복잡도 감소, 다른 모듈에 영향을 주지 않으므로 수정 용이, 구현 용이, 확장성, 융통성, 유지보수성, 재사용성, 경제성

단점 : 모듈의 수가 많아지면 인터페이스에 대한 비용이 증가하므로 최적의 모듈 갯수를 구하는 것이 중요하다.

 

공유도(Fan-in)와 제어도(Fan-out)

공유도는 얼마나 많은 모듈이 주어진 모듈을 호출하는 가를 나타내는 척도로 상위 모듈 수.

제어도는 주어진 모듈이 호출하는 모듈의 수, 하위 모듈 수.

 

결합도 : 모듈간의 상호 의존도. 모듈의 상대적인 독립성 정도. 모듈 간 관계 (약할수록 좋다)

  • 자료 결합도 : data coupling. 매개변수. 모듈간의 대화를 위해 매개변수를 주고받는 경우. call by value기법
  • 스탬프 결합도 : stamp coupling. 자료구조. 공동 자료(레코드, 배열 등)를 필요로 하는 모듈 사이에서 선별적으로 공유하는 경우
  • 제어 결합도 : control coupling. 제어용 신호(flag, switch). 한 모듈이 타 모듈 내의 기능을 제어하기 위해 제어용 신호를 주고받는 경우.
  • 외부 결합도 : external coupling. 외부 변수. 외부변수로 선언된 데이터를 서로 다른 모듈에서 참조하는 경우
  • 공통 결합도 : common coupling. 전역 변수(call by reference). 광의의 자료구조에 의해 모듈들이 서로 묶여 있는 경우.(FORTRAN의 COMMON 명령, PL/1의 External 속성 등)
  • 내용 결합도 : content coupling. 주종 관계(결정자, 종속자 관계). 어느 한 모듈이 국부적인 자료 값을 수정하거나 타 모듈 내부를 수정하는 경우.(한 모듈이 다른 모듈의 영역 안의 제어 정보나 자료를 이용할 때 발생). 모듈을 수정할 경우 두 모듈을 항상 같이 고려해야 하므로 가장 안 좋은 결합도.

 

응집도 : 한 모듈 내에 있는 구성요소의 기능적 관련성. 모듈의 상대적인 함수적 강도. 모듈 내 관계 (강할수록 좋다)

  • 우연적 응집도 : coincidental cohesion. 원소들이 뚜렷한 목적없이 한 모듈 내에 존재하는 경우. (서로 다른 범주의 업무 처리 성격인데 같은 모듈로 묶인 경우)
  • 논리적 응집도 :  logical cohesion. 논리적으로 유사한 기능을 갖지만 서로 간의 관계는 밀접하지 않은 경우. (모든 입력 또는출력 자료 처리 기능을 집한 시킨 경우. 같은 범주의 업무 처리 성격을 묶음)
  • 시간적 응집도 : temporal cohesion. 모든 원소들이 한 번에 실행되나 이를 결정하는 매개변수가 논리를 필요치 않는 경우 (수행순서가 중요치 않고 단순 코드로 구성)
  • 절차적 응집도 : procedural cohesion. 모듈 내 구성요소들이 연관성이 있고 트정 수서에 의해 수행되는 경우 
  • 정보적 응집도 : commutication cohesion. 모든 원소들이 동일 입력 또는 출력 자료를 이용하여 서로 다른 기능을 수행하는 경우(처리 요소가 특정 순서에 무관)
  • 순차적 응집도 : sequential cohesion. 한 원소의 출력이 다른 원소의 입력이 되는 경우(처리 요소가 특정 순서에 맞게 처리됨)
  • 기능적 응집도 : functional cohesion. 모듈내의 모든 원소들이 단일 기능을 수행하기 위해 반드시 필요한 경우. 프로그램 언어에서 지원받는 라이브러리. 응집도 중 가장 강하고 좋은 모듈.

 

참조

https://jaewanlife.wordpress.com/2012/11/05/source-reuse%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%B0%A9%EB%B2%95-%EB%AA%A8%EB%93%88-%EA%B0%9D%EC%B2%B4-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8/

'CS' 카테고리의 다른 글

EAI (Enterprise Application Integration)  (0) 2021.06.05
디자인패턴  (0) 2020.09.03
디자인 패턴의 종류  (0) 2020.08.10
[기초 지식] IT 용어 정리  (0) 2019.12.11
[기초 지식] sample rate, channel, bit rate란?  (0) 2019.09.20