
모듈이란?
모듈은 규모가 큰 것을 여러개로 나눈 조각. 소프트웨어 구조를 이루는 기본 단위이다.
독립 프로그램도 하나의 모듈이 될 수 있고 함수도 하나의 모듈이 될 수 있다.
모듈의 원칙 : 모듈 간의 결합은 느슨하게, 모듈 내 구성 요소 간의 응집은 강하게
모듈화의 장점
- 수정 용이
- 재사용성 용이
- 유지 및 관리 쉬움
모듈화 평가 기준
1. 응집도 (cohesion)
응집도는 하나의 모듈 안에서 구성 요소 간에 뭉쳐 있는 정도이다.
응집도가 높을수록 꼭 필요한 구성요소가 모여 있고, 낮을수록 관련성이 적은 구서 요소들이 모여 있다.
응집도가 가장 높은 것은 모듈 하나가 단일 기능으로 구성된 경우이며, 가장 낮은 것은 우연히 함께 묶인 경우이다.
- 기능적 응집도 (functional cohesion) (=함수적 응집)
응집도가 가장 높은 경우로 단일 기능의 요소가 하나의 모듈을 구성
모듈 내부의 모든 기능이 단일 목적을 위하여 동작하는 경우
- 순차적 응집도 (sequential cohesion)
두 요소가 하나의 모듈로 구성된 경우
모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동에 사용하는 경우
두 요소가 아주 밀접하므로 하나의 모듈로 묶을 만한 충분한 이유가 됨
- 교환적 응집도 (communication cohesion) (=정보적 응집)
입력을 사용하는 구성 요소가 하나의 모듈로 구성된 경우
동일한 입력과 출력을 사용하여 다른 기능을 수행
구성 요소가 동일한 출력을 만들어낼 때도 교환적 응집이 됨
요소 간의 순서는 중요하지 않음
순차적 응집보다 묶인 이유가 조금 약하므로 순차적 응집보다 응집력이 약하다고 할 수 있음
- 절차적 응집도 (procedural cohesion)
순서가 정해진 몇 개의 구성 요소가 하나의 모듈로 구성된 경우
모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행하는 경우
순차적 응집과는 어떤 구성 요소의 출력이 다음 구성 요소의 입력으로 사용되지 않고 순서에 따라 수행된다는 점이 다름
한 요소의 출력이 다음 요소의 입력으로 사용되지 않으므로 순차적 응집보다는 묶인 이유가 조금 약한 편
- 시간적 응집도 (temporal cohesion)
순서가 정해진 몇 개의 구성 요소가 하나의 모듈로 구성된 경우
연관된 기능이라기 보다는 특정 시점에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
순차적 응집과는 어떤 구성 요소의 출력이 다음 구성 요소의 입력으로 사용되지 않고 순서에 따라 수행된다는 점이 다름
한 요소의 출력이 다음 요소의 입력으로 사용되지 않으므로 순차적 응집보다는 묶인 이유가 조금 약한 편
- 논리적 응집도 (logical cohesion)
구성 요소 간에 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
비슷한 기능(입출력): scanf(), printf()를 결합한 입출력 모듈
공통점(덧셈): 정수의 덧셈과 행렬의 덧셈을 결합한 덧셈 모듈
공통점(출력): 단말기 출력 기능과 파일 출력 기능을 결합한 출력 모듈
- 우연적 응집도 (coincidental cohesion)
구성 요소들이 말 그대로 우연히 모여 구성
특별한 이유 없이 몇 개의 모듈로 나누는 과정에서 우연히 같이 묶인 것
구성 요소 간에 관련이 별로 없어 응집도가 가장 낮음
2. 결합도 (coupling)
결합도는 모듈과 모듈 사이의 관계에서 관련 정도를 나타냄
모듈 간의 결합에도 간섭하는 관계와 좋은 관계(간섭이 적은)가 있음
모듈 간에는 관련이 적을수록 상호 의존성이 줄어 모듈의 독립성이 높아지고 독립성이 높으면 모듈 간에 영향이 적음
결합에서 좋은 관계는 데이터만 주고 받는 관계 / 나쁜 관계는 필요한 데이터만 주지 않고 직접 관여(간섭)하는 관계
- 데이터 결합 (data coupling)
가장 좋은 모듈 간 결합
모듈이 매개변수를 통해 데이터만 주고받음으로써 서로 간섭을 최소화
모듈 간의 독립성이 보장되고 관계가 단순해, 하나의 모듈을 변경해도 다른 모듈에 미치는 영향이 아주 적음
유지보수도 매우 쉬움
- 스탬프 결합 (stamp coupling)
두 모듈이 정보를 교환할 때 필요한 데이터만 주고받을 수 없고 필요 없는 데이터까지 주고받아야 하는 경우
스탬프에 해당하는 것은 레코드나 배열 같은 자료구조로 하나의 데이터만 필요한데도 레코드 전체가 넘어옴
C 언어의 구조체도 스탬프 결합의 예
데이터 하나가 변경되면 관련된 모듈에 있는 자료구조를 모두 바꿔야 하므로 데이터 결합보다 모듈 간의 관련성이 더 높음
- 제어 결합 (control coupling)
호출하는 모듈이 호출되는 모듈의 내부 구조를 잘 알고 논리적 흐름을 변경하는 관계로 묶이는 관계
예) 피라미터로 전달되는 값에 따라 모듈 내부 로직의 처리가 달라지는 경우
정보은닉을 크게 위배하여 다른 모듈의 내부에 관여해 관계가 복잡해지고 그로 인해 유지보수도 매우 어려워짐
- 공통 결합 (common coupling)
모듈이 공통 변수를 함께 사용하므로 모듈이 전역 변수를 사용할 때 공통 결합이 성립
변숫값이 변하면 모든 모듈이 함께 영향을 받는 문제가 있음
공통 영역에서 문제가 발생하거나 데이터가 변경되면 관련된 모듈을 모두 검토해야 하므로 유지보수가 어려움
데이터를 개별 모듈 내부에서 지역 변수로 선언하여 보완
- 내용 결합 (content coupling)
모듈 간에 인터페이스를 사용하지 않고 직접 왔다 갔다 하는 것
상대 모듈의 데이터를 직접 변경할 수 있어 서로 간섭을 가장 많이 함
가장 바람직하지 못한 관계로, 모듈이 서로 종속되어 독립적으로 설계하거나 변경할 수 없음
한 모듈이 다른 모듈 내부의 데이터를 직접 참조해 모듈의 독립성이 보장되지 않음. 유지보수가 매우 어려움
'Coding Study' 카테고리의 다른 글
| 선형회귀 모델 - 단순 선형회귀, 다중 선형회귀 (0) | 2023.11.09 |
|---|---|
| 유스케이스 다이어그램의 작성 과정 (0) | 2023.11.08 |