Module   모듈

(2026-01-29)

Modularity, 모듈성, Modularization, 모듈화


1. 일반적으로, 모듈 이란?

  ㅇ 보다 작고 이해할 수 있는 단위로 나뉘어진 것

  ㅇ 본체(本體)에서 분리되어, 
     - 작은 부분으로 유기적으로(기능별로) 구성되어 있다가,
     - 필요할 때 마다, 본체에 합류하여 그 기능을 수행할 수 있는 것

  ㅇ 통상, 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체로 봄
     - 例) 각기 다른 여러 모듈 단위로 조립하여 전체를 완성 (모듈 조립)
     - 例) 표준화된 부품 (조립식 부품)


2. 문제를 다룰 때 모듈화 하는 이유는?

  ㅇ 모듈화는, 거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정
     - 여기서, 작게 나누어진 각 부분을 모듈이라고 함
        . 각 모듈은 논리적 또는 기능적으로 분리되어 격리되고 독립적인 일을 수행

  ㅇ 모듈화 과정의 잇점
     - 기본적인 것을 엮어서 복잡한 형상으로 짜맞추고, 
     - 이를 요약하여(간추리어) 이름을 짓는 등,
     - 더 높은 수준으로 만들어가면서 (추상화),
     - 큰 눈으로 시스템을 구조적으로 바로볼 수 있게 함


3. 모듈의 특성

  ㅇ Unity (한가지 일만 수행)  :  단일 책임성
  ㅇ Smallness (간단명료)  :  간단하고 이해하기 쉬움
  ㅇ Simplicity (단순성)  :  복잡성 최소화
  ㅇ Independency (독립성)  :  다른 모듈에 의존하지 않고 동작 가능


4. 모듈화 장점

  ㅇ 수정 용이
  ㅇ 재사용성 용이
  ㅇ 유지관리 쉬움

  ※ 이때, 모듈간 호환성 고려 필요 => 표준화가 중요


5. [전산]  프로그래밍에서, 모듈 이란?

  ㅇ 모듈이란, 독립적으로 설계,이해,재사용 가능한 프로그램 구성 단위
     - 즉, 소스 코드를, 기능별로 분리/저장하여, 재사용 및 관리가 쉽도록 함
        . 기능 단위코드를 묶어 관리하기 위한 논리단위
        . 명확한 인터페이스(입구,출구) 를 가짐
        . 내부 구현은 숨기고, 외부에는 사용 방법만 노출 가능
     - 또한, 소프트웨어 묶음을 만들고, 코드네임스페이스(이름공간)로써 구분하는 메커니즘
        . 모듈은, 기능(함수)별로 여럿을 하나로 정리/모으거나 분할하는 것
        . 다른 프로그램의 일부가 될 수 있는 유용한 내용들을 모아놓은 파일
        . 통상, 함수, 클래스, 상수 등의 모임을 포함하며,
           .. 언어에 따라 변수(전역 변수 포함)도 정의될 수 있음
        . 이들을, 필요할 때 마다, 가져다 쓸 수 있도록 (재사용) 하기 위한 것

  ㅇ "모듈"은 언어 마다 구현방식,의미가 다름
     - 자바 언어  :  (패키지를 묶는 상위 단위)
        . (모듈 > 패키지 > 클래스)
           .. 패키지는 여러 클래스들의 모음이고, 모듈은 여러 패키지들의 모음
        . 모듈  :  여러 패키지를 묶는 배포,의존성 관리 단위
           .. module-info.java로 명시
           .. 접근 제어, 의존성 선언이 목적
        . 패키지  :  네임스페이스 + 클래스 묶음
        . 자바 언어의 "모듈"은, 언어 설계 + 빌드/배포 차원의 개념이 강함  

     - Python / JavaScript
        . 파일 단위 = 모듈
        . import / export 로 사용
           .. 다른 파일에서 import를 통해 불러와 사용
        . 함수, 클래스, 변수, 상수 모두 포함 가능
        . [참고] ☞ 파이썬 모듈, 자바스크립트 모듈 참조


6. [전산]  프로그래밍에서, 모듈화,캡슐화 비교

  ㅇ 모듈화 (Modularization)  :  시스템 분해 관점
     - 모듈화는, 복잡한 시스템을 기능 단위로 나누고, 전체적으로 완결된 구조를 갖게하는 설계 기법
        . 복잡한 시스템의 기능별 분할 및 구조화에 유리
        . 구조적 / 객체지향 / 함수형 프로그래밍 모두에서 사용됨
     - 모듈화 원칙
        . 개별 기능별로 하나의 완결된 구조를 가져야 함
        . 각 모듈별로 독립성을 가져야 함
        . 각 모듈은 반드시 입구,출구가 있어야 함
     - 모듈화 특징
        . 구조 : 여러 기능들을 하나로 모으고, 이들이 함께 공유하는 데이터들로써 구성됨
        . 용법 : 패키지,모듈 등을 파일 단위로 정의하여두고, 이를 가져오는 방식이 대부분임
        . 장점 : 큰 기능(어플리케이션)을 작은 기능 단위로 나누어 관리 가능
           .. 유지보수 용이, 코드의 가독성이 좋아지는 등
     - 모듈화 평가 (분할된 모듈 간의 독립성 평가)
        . 결합도 (Coupling)  :  (낮을수록 좋음)
        . 응집도 (Cohesion)  :  (높을수록 좋음)

  ㅇ 캡슐화 (Encapsulation)  :  정보 은닉 관점
     - 캡슐화는, 보다 잘 설계된 모듈에서 나오는 특성을 주로 의미함
        . 데이터 + 행위를 하나로 묶고
        . 내부 구현을 외부로부터 숨김
        . 인터페이스 만 노출
        . 객체지향 프로그래밍에서 가장 명확하게 구현 가능

  ※ [비교 요약]
     - 모듈화는, "어떻게 나눌 것인가"에 대한 설계 기법
     - 캡슐화는, "나눈 내부를 어떻게 숨길 것인가"에 대한 설계 원칙

공통/핵심어(ㅁ)
1. 마스크 (mask)   2. 매니폴드 (manifold)   3. 모듈 (module)   4. 모듈러스 (modulus)   5. 모드 (mode), 모달 (modal)   6. 모멘트 (moment)   7. 모호성 (ambiguity)   8. 밀도 (density)  
용어해설 종합 (단일 페이지 형태)

"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"
     [정보통신기술용어해설]