응집도 (Cohesion), 결합도 (Coupling) |
I. 분해와 추상화를 통한 SW 설계 및 구현기법, 모듈화의 개요
가. 모듈화 (Modularity)의 정의
- 시스템을 분해하고 추상화를 통해 소프트웨어 성능을 향상 시키고 유지보수를 효과적으로 하기 위한 SW 설계 및 구현 기법
나. 모듈 (Module)의 원리
구분 |
설명 |
비용과 모듈과의 관계 |
모듈수가 증가하면 인터페이스 비용이 증가 |
모듈의 독립성 |
낮은 결합도와 높은 응집도를 가짐 |
자료 추상화 |
각 모듈 자료구조를 엑세스하고 수정하는 함수 내에 자료 구조의 표현 내역을 은폐 |
다. 모듈의 속성과 구성
구분 |
구성요소 |
설명 |
속성 |
입출력요소 |
자료를 받아들이고 자료를 내보내는 요소 |
기능요소 |
입력을 출력으로 바꾸는 요소, 즉 모듈의 처리 결과 |
|
기관요소 |
기능을 수행하기 위한 절차상의 코드 또는 논리 |
|
내부자료요소 |
모듈 자체의 작업장, 모듈이 스스로 참조하는 자료 |
|
구성 |
호출모듈 |
다른 모듈을 호출하는 모듈 |
피호출모듈 |
다른 모듈에 의해 호출되는 모듈 |
II. 모듈화의 주요 특성과 기법의 종류
가. 모듈화의 주요 특성
구분 |
설명 |
특징 |
모듈성 (Modularity) |
프로그램을 효율적으로 관리할 수 있도록 하는 소프트웨어의 특성으로 시스템 분해 및 추상화를 통해 소프트웨어 성능 향상을 위한 적합한 프로그램 단위 |
- 성능향상 - 컴포넌트화 - 재 사용성 |
응집도 (Cohesion) |
모듈의 독립성을 나타내는 개념으로 하나의 모듈 내부 처리 요소들간에 기능적 연관도를 측정하는 척도 |
- 높을수록 좋음 |
결합도 (Coupling) |
소프트웨어 구조에서 모듈간 연관성을 측정하는 척도 |
- 낮을수록 좋음 |
나. 모듈화의 기법의 종류
구분 |
기법 |
설명 |
설계 |
Module |
설계 시 관련이 있는 기능을 한 부분에 모아놓고 라이브러리 형태로 사용 |
컴포넌트 |
바이너리 형태의 재사용 가능한 형태로 인터페이스로 인해 로직을 수행하는 모듈단위 |
|
서비스 |
기존 컴포넌트보다 Loosely - Coupled 한 형태의 기능을 제공하는 모듈 단위 |
|
구현 |
Macro |
프로그램 구현 시 반복되는 부분을 특정 이름을 부여하고 이름을 호출하여 실행 할 수 있도록 하는 프로그래밍 기법 |
Function |
프로그램 구현 시 커다란 프로그램의 일부 코드로 특정한 작업을 수행하고 상대적으로 다른 코드에 비해 독립적인 모듈 |
|
Inline |
프로그램 구현 시 반복되는 부분을 특정 이름을 부여해 놓고 이름을 호출하여 실행할 수 있도록 하는 프로그램 기법 |
III. 응집도와 결합도
가. 응집도의 정의
- 정보은닉 개념을 확장한 것으로 모듈 안의 요소들이 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미
나. 응집도의 단계 (우논시절통순기)
응집도 |
설명 |
|
우연적 |
아무 관련성 없는 작업을 한 모듈에서 모음 |
|
논리적 |
유사한 성격의 작업들을 모음 |
|
시간적 |
같은 시간대에 처리 되어야하는 것들을 모음 |
|
절차적 |
모듈 진행 요소들이 서로 관계 되어지고 순서대로 진행 |
|
통신적 |
동일한 입, 출력 자료를 이용하여 서로 다른 기능을 수행하는 기능 |
|
순차적 |
작업의 결과가 다른 모듈의 입력 자료로 사용 |
|
기능적 |
하나의 기능만 수행하는 모듈 |
다. 결합도의 정의
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미하는 것으로 독립적인 모듈이 되기 위해 각 모듈간의 결합도가 약해야 하면 의존하는 모듈이 적어야 한다.
라. 결합도의 단계 (내공외제스자)
결합도 |
설명 |
|
자료 |
모듈들이 간단히 변수를 파라미터로 교환 |
낮음 높음 낮을수록 좋음 |
스템프 |
모듈 사이에 자료구조 교환 |
|
제어 |
제어용 신호를 주고 받음 |
|
외부 |
모듈들이 소프트웨어의 외부 환경과 연관되는 경우 |
|
공통 |
많은 모듈들이 전역변수를 참조할 때 발생 |
|
내용 |
한 모듈이 다른 모듈의 내부 자료나 제어정보를 사용 |
'IT기술노트 > 소프트웨어공학' 카테고리의 다른 글
UML(Unified Modeling Language) (0) | 2021.01.31 |
---|---|
다형성 (Polymorphism) (0) | 2021.01.31 |
객체지향 (Object-Oriented) (0) | 2021.01.31 |
객체지향 설계원칙 (0) | 2021.01.31 |
소프트웨어 설계 (Software Design) (0) | 2021.01.31 |
도메인공학 (0) | 2021.01.31 |
페르소나 (Persona) (0) | 2021.01.31 |
요구사항 추적표 (0) | 2021.01.31 |
댓글