전공공부/소프트웨어 설계 (Software Design)

[소프트웨어 설계] 모듈의 결합도와 응집도

jooona 2021. 3. 6. 01:01
반응형

1. 모듈 (Module)

모듈이란 모듈화를 통해 분리된 시스템의 각 기능을 뜻합니다. 모듈화는 시스템을 모듈 단위로 나누는 것을 뜻하며, 이를 통해 시스템의 수정 및 재사용, 그리고 유지, 관리가 용이해지고, 소프트웨어의 성능을 향상할 수도 있습니다. 이 모듈은 단독으로 컴파일이 가능하고, 또 재사용이 가능합니다. 

 

이 모듈들이 시스템 안에서 얼마나 독립적으로 기능을 하는지를 모듈의 기능적 독립성이라고 합니다. 즉 모듈이 하나의 기능만을 수행하고, 다른 모듈과의 과도한 상호작용을 줄이는 것이 기능적 독립성을 높일 수 있는 방법이며, 기능적 독립성이 높을수록 모듈화의 장점들을 더 부각할 수 있습니다.

 

시스템이 독립성이 높은 모듈들로 구성이 되어야 모듈을 수정하더라도 다른 모듈들에 영향을 최대한 덜 미칠 수가 있으며, 오류가 발생해도 쉽게 발견하고 해결할 수 있습니다.

 

이 모듈의 독립성의 정도는 결합도 (Coupling)응집도(Cohesion)로 측정이 가능합니다. 결합도가 약할수록, 그리고 응집도가 강할수록, 그리고 모듈의 크기가 작을수록 독립성이 높아집니다.

 

2. 결합도

결합도는 모듈 간에 상호 의존하는 정도, 다시 말해 서로 다른 모듈 사이의 연관 관계를 의미합니다. 위에서도 언급했듯이, 독립적인 모듈이 되기 위해서는 결합도가 약해야 합니다.

 

결합도의 종류는 다음과 같으며, 1번이 가장 결합도가 약하고, 내려갈수록 결합도가 강합니다.

 

1. 자료 결합도: 단순히 데이터만 매개 변수 또는 인수로 전달하고 호출하는 방식입니다. 모듈 간에 서로의 내용을 전혀 알 필요가 없는 상태이기 때문에, 가장 바람직한 결합도입니다. 

2. 스탬프 결합도: 배열이나 리스트와 같은 자료구조를 매개 변수로 전달하는 경우의 결합도입니다. 

3. 제어 결합도: 한 모듈이 다른 모듈의 논리적인 흐름을 제어하기 위해 제어 신호나 플래그(flag)를 전달하는 경우입니다. 

4. 외부 결합도: 한 모듈에서 선언한 데이터를 외부의 다른 모듈이 사용할 때의 결합도입니다. 

5. 공통 결합도: 전역 변수와 같은 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도입니다. 당연히 공통 데이터 영역의 내용을 조금만 변경하더라도 이를 사용하는 모든 모듈들이 영향을 받기 때문에 결합도가 높습니다.

6. 내용 결합도: 한 모듈이 다른 모듈의 내부 기능 및 자료를 직접 참조하는 경우입니다. 

 

3. 응집도

응집도란 하나의 모듈의 내부 요소들이 서로 연관되어 있는 정도, 다시 말해 모듈이 독립적인 하나의 기능을 수행하는 정도를 뜻합니다. 응집도는 결합도와 반대로 높을수록 독립적인 모듈로 간주됩니다.

 

응집도의 종류는 다음과 같으며, 1번이 가장 응집도가 강하고, 내려갈수록 응집도가 약합니다.

 

1. 기능적 응집도: 모듈 내의 모든 요소들이 단일 기능을 수행하는 경우입니다. 

2. 순차적 응집도: 모듈 내의 한 요소의 출력 자료가 다음 요소의 입력 자료로 사용되는 경우입니다.

3. 교환적 응집도: 모듈 내의 요소들이 동일한 입출력 자료로 서로 다른 기능을 수행하는 경우입니다.

4. 절차적 응집도: 모듈이 여러 개의 관련 기능을 가질 때, 이 요소들이 반드시 순차적으로 기능을 수행하는 경우입니다.

5. 시간적 응집도: 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성된 경우입니다.

6. 논리적 응집도: 논리적으로 유사한 기능을 수행하긴 하지만, 서로 간의 관계는 밀접하지 않는 경우입니다.

7. 우연적 응집도: 모듈 내부의 구성 요소들이 크게 관련이 없는 요소들로 구성된 경우입니다.

반응형