1. 일반적으로, 모듈 이란?
ㅇ 보다 작고 이해할 수 있는 단위로 나뉘어진 것
ㅇ 본체(本體)에서 분리되어,
- 작은 부분으로 유기적으로(기능별로) 구성되어 있다가,
- 필요할 때 마다, 본체에 합류하여 그 기능을 수행할 수 있는 것
ㅇ 통상, 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체로 봄
- 例) 각기 다른 여러 모듈 단위로 조립하여 전체를 완성 (모듈 조립)
- 例) 표준화된 부품 (조립식 부품)
2. 문제를 다룰 때 모듈화 하는 이유는?
ㅇ 모듈화는, 거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정
- 여기서, 작게 나누어진 각 부분을 모듈이라고 함
. 각 모듈은 논리적 또는 기능적으로 분리되어 격리되고 독립적인 일을 수행
ㅇ 모듈화 과정의 잇점
- 기본적인 것을 엮어서 복잡한 형상으로 짜맞추고,
- 이를 요약하여(간추리어) 이름을 짓는 등,
- 더 높은 수준으로 만들어가면서 (추상화),
- 큰 눈으로 시스템을 구조적으로 바로볼 수 있게 함
3. 모듈의 특성
ㅇ Unity (한가지 일만 수행) : 단일 책임성
ㅇ Smallness (간단명료) : 간단하고 이해하기 쉬움
ㅇ Simplicity (단순성) : 복잡성 최소화
ㅇ Independency (독립성) : 다른 모듈에 의존하지 않고 동작 가능
4. 모듈화 장점
ㅇ 수정 용이
ㅇ 재사용성 용이
ㅇ 유지관리 쉬움
※ 이때, 모듈간 호환성 고려 필요 => 표준화가 중요
5. [전산] 프로그래밍에서, 모듈 이란?
ㅇ 모듈이란, 독립적으로 설계,이해,재사용 가능한 프로그램 구성 단위
- 즉, 소스 코드를, 기능별로 분리/저장하여, 재사용 및 관리가 쉽도록 함
. 기능 단위로 코드를 묶어 관리하기 위한 논리적 단위
. 명확한 인터페이스(입구,출구) 를 가짐
. 내부 구현은 숨기고, 외부에는 사용 방법만 노출 가능
- 또한, 소프트웨어 묶음을 만들고, 코드를 네임스페이스(이름공간)로써 구분하는 메커니즘
. 모듈은, 기능(함수)별로 여럿을 하나로 정리/모으거나 분할하는 것
. 다른 프로그램의 일부가 될 수 있는 유용한 내용들을 모아놓은 파일
. 통상, 함수, 클래스, 상수 등의 모임을 포함하며,
.. 언어에 따라 변수(전역 변수 포함)도 정의될 수 있음
. 이들을, 필요할 때 마다, 가져다 쓸 수 있도록 (재사용) 하기 위한 것
ㅇ "모듈"은 언어 마다 구현방식,의미가 다름
- 자바 언어 : (패키지를 묶는 상위 단위)
. (모듈 > 패키지 > 클래스)
.. 패키지는 여러 클래스들의 모음이고, 모듈은 여러 패키지들의 모음
. 모듈 : 여러 패키지를 묶는 배포,의존성 관리 단위
.. module-info.java로 명시
.. 접근 제어, 의존성 선언이 목적
. 패키지 : 네임스페이스 + 클래스 묶음
. 자바 언어의 "모듈"은, 언어 설계 + 빌드/배포 차원의 개념이 강함
- Python / JavaScript
. 파일 단위 = 모듈
. import / export 로 사용
.. 다른 파일에서 import를 통해 불러와 사용
. 함수, 클래스, 변수, 상수 모두 포함 가능
. [참고] ☞ 파이썬 모듈, 자바스크립트 모듈 참조
6. [전산] 프로그래밍에서, 모듈화,캡슐화 비교
ㅇ 모듈화 (Modularization) : 시스템 분해 관점
- 모듈화는, 복잡한 시스템을 기능 단위로 나누고, 전체적으로 완결된 구조를 갖게하는 설계 기법
. 복잡한 시스템의 기능별 분할 및 구조화에 유리
. 구조적 / 객체지향 / 함수형 프로그래밍 모두에서 사용됨
- 모듈화 원칙
. 개별 기능별로 하나의 완결된 구조를 가져야 함
. 각 모듈별로 독립성을 가져야 함
. 각 모듈은 반드시 입구,출구가 있어야 함
- 모듈화 특징
. 구조 : 여러 기능들을 하나로 모으고, 이들이 함께 공유하는 데이터들로써 구성됨
. 용법 : 패키지,모듈 등을 파일 단위로 정의하여두고, 이를 가져오는 방식이 대부분임
. 장점 : 큰 기능(어플리케이션)을 작은 기능 단위로 나누어 관리 가능
.. 유지보수 용이, 코드의 가독성이 좋아지는 등
- 모듈화 평가 (분할된 모듈 간의 독립성 평가)
. 결합도 (Coupling) : (낮을수록 좋음)
. 응집도 (Cohesion) : (높을수록 좋음)
ㅇ 캡슐화 (Encapsulation) : 정보 은닉 관점
- 캡슐화는, 보다 잘 설계된 모듈에서 나오는 특성을 주로 의미함
. 데이터 + 행위를 하나로 묶고
. 내부 구현을 외부로부터 숨김
. 인터페이스 만 노출
. 객체지향 프로그래밍에서 가장 명확하게 구현 가능
※ [비교 요약]
- 모듈화는, "어떻게 나눌 것인가"에 대한 설계 기법
- 캡슐화는, "나눈 내부를 어떻게 숨길 것인가"에 대한 설계 원칙