본문 바로가기
IT기술노트/소프트웨어공학

모듈화 (Modularity)

by 비트코기 2021. 1. 31.

응집도 (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

댓글