리안이와 함께하는 세상

[소프트웨어공학] 응집도와 결합도(Cohesion, Coupling) 본문

9급 공무원/컴퓨터 일반

[소프트웨어공학] 응집도와 결합도(Cohesion, Coupling)

리안아범 2017. 3. 5. 21:42

* 결합도 : 두 모듈간의 독립성

 - 내용 결합도 : 다른 모듈을 이용하려면 해당 모듈의 내용을 알아야 함(한 모듈이 다른 모듈의 제어 정보 사용 or 중간 분기(goto)가 있는 경우)
    > 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우

 - 공통 결합도 : 하나의 기억장소에 공동의 자료 영역 설정하여 자료 교환(전역변수 사용)
    > 파라미터가 아닌 모듈밖에 선언되어 있는 전역변수를 참조하고 전역변수를 갱신하는 식으로 상호작용

 - 외부 결합도 : 동일한 광역 데이터 아이템(단일 필드변수)를 사용 (외부변수로 선언된 데이터를 같이 참조)
    > 어떤 모듈에서 반환한 값을 다른 모듈에서 참조해서 사용하는 경우

 - 제어 결합도 : 처리 대상뿐 아니라 어떻게 처리할 것인지에 대한 제어정보까지 파라미터로 넘기는 경우
    > 하나의 모듈이 다른 모듈으로 무엇을 해야하는지 정보를 넘겨줌으로서 다른 모듈의 흐름을 제어하는 경우

 - 스탬프 결합도 : 한 그룹의 모듈들이 동일한 비광역 데이터 구조 사용(모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐등이 전달)
    > 두 모듈이 동일한 자료구조 조회

 - 데이터(자료) 결합도 : call by value로 매개변수 교환

* - 메시지 결합도 : 상태분산(state decentralization)을 통해 이룰 수 있고, 컴포넌트 간의 통신은 파라미터나 메시지 패싱을 통해 이루어진다.


* 응집도 : 한 모듈 내의 함수적 강도

 - 우연적(Coincidental) 응집도 : 관계없는 요소가 모여 모듈 구성

 - 논리적(Logical) 응집도 : 모듈의 요소가 논리적으로 관계가 있긴 함(파라미터에 따라 모듈의 기능이 달라짐(산수 함수 includes add sum sub div...)

 - 시간적(Temporal) 응집도 : 연관된 기능이라기보다 특정한 시간대에 처리되는 몇개의 기능을 모아 모듈화(프로그램 초기화 모듈이나, 종료모듈)

 - 절차적(Procedural) 응집도 : 다수의 관련 기능을 순차적으로 수행
    > 모듈 내부의 요소들이 여러 관련 기능이 있을 때, 순차적으로 수행할 경우
    > 구성요소들이 입출력을 공유하지 않으나 순서에 따라 수행될 필요가 있는 경우

 - 통신적(교환적, Communication) 응집도 : 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우

 - 순차적(sequential) 응집도 : 실행 순서가 밀접한 관계를 갖는 기능을 모아 모듈도 구성(순서도를 기반으로 프로그램을 짤 경우 이 응집도가 되기 쉽다)
    > 한 모듈 내에서 한 활동으로 부터 나온 출력값을 다른 활동이 사용할 경우(?)
    > 한 모듈 내부의 한 기능 요소에 의한 출력 자료가 다음 기능 원소의 입력 자료로서 제공되는 형태

 - 기능적(functional) 응집도 : 모듈 내 요소가 한가지 기능을 수행하기 위해 구성



** 결합도는 두 모듈 사이, 응집도는 한 모듈 내
** 결합도는 낮을수록, 응집도는 높을수록 좋다.

? 순차적 응집도와 절차적 응집도
 - 순서대로 실행되는 기능들이 서로간에 입출력에 연관성을 가지면 순차적 응집도, 입출력에 상관없는 연관성을 가지면 절차적 응집도.
※ 모듈 내 구성요소들이 연관성이 있고, 특정 순서에 의해 수행되는 경우 순차적 응집도가 있다고 말한다(x) > 절차적 응집도가 있다.
(라고 한다... 뭔 개똥같은 소린지...휴...)

ps. 가장 안외워지던 포인트... 적으면서 보니까 좀 이해가 되는 것도같고..?