Modula-2 — 모듈과 정보 은닉을 언어 차원에서 도입한 Pascal의 후계자 (1978, Niklaus Wirth)
Entity (인물·조직)lectureverified2026-05-09

Modula-2 — 모듈과 정보 은닉을 언어 차원에서 도입한 Pascal의 후계자 (1978, Niklaus Wirth)

#vch#lecture-intro#A-language#g3

Modula-2 — 모듈과 정보 은닉을 언어 차원에서 도입한 Pascal의 후계자

1. 요약

Modula-2는 1978년 Niklaus Wirth가 발표한 Pascal의 직계 후계 언어이다. *모듈(module)*을 1급 시민으로 도입하여, 분리 컴파일·정보 은닉·인터페이스와 구현 분리를 언어 문법 차원에서 강제한 첫 절차형 언어이다. ETH Zürich의 Lilith 워크스테이션의 시스템 언어로 사용되었고, 1996년 ISO/IEC 10514로 표준화되었다.

2. 등장 배경

Pascal의 한계는 1970년대 중반에 명확해졌다. 분리 컴파일이 표준으로 정의되어 있지 않았고, 큰 시스템을 여러 파일로 나누어 협업하기가 어려웠다. 정보 은닉도 언어 차원에서 강제되지 않았다.

  • Mesa 언어 영향: 1976년 Wirth는 Xerox PARC에서 안식년을 보냈다. 그곳에서 Mesa 언어와 Xerox Alto 컴퓨터를 접했다. Mesa는 모듈 시스템과 분리 컴파일을 본격 도입한 언어였다.
  • Parnas의 정보 은닉: David Parnas가 1972년 발표한 "On the Criteria To Be Used in Decomposing Systems into Modules" (CACM)는 정보 은닉을 모듈 분해의 핵심 기준으로 제시했다. Modula-2는 이 사상을 언어 문법으로 박은 결과물.
  • Lilith 프로젝트: ETH Zürich에서 진행된 워크스테이션 프로젝트. 운영체제·응용 소프트웨어 모두 Modula-2로 작성하기 위한 시스템 언어로 설계됨.

1977~1985년에 걸쳐 개발, 1978년 첫 공개.

3. 핵심 특징

  1. 모듈(Module) — 분리 컴파일의 단위. 여러 사람이 독립적으로 모듈을 작성·컴파일할 수 있음. 한 패스 컴파일러("about four times faster than earlier multi-pass compilers") 가능.
  2. 정의 모듈 vs 구현 모듈(Definition vs Implementation Module)DEFINITION MODULE공개 인터페이스만, IMPLEMENTATION MODULE내부 구현. Parnas 정보 은닉의 직접 구현.
  3. 코루틴(Coroutines) — 동시성의 언어 차원 구성 요소. 운영체제 작성에 필요한 협력적 멀티태스킹.
  4. 시스템 프로그래밍 접근(Low-Level Access)SYSTEM 모듈을 통해 메모리 주소·기계 명령 직접 접근. C가 언어 차원에서 노출한 것을, Modula-2는 모듈로 격리하여 노출.
  5. 엄격한 스코프 제어 — Pascal보다 더 명시적인 가시성 규칙. EXPORT/IMPORT 키워드.

4. 주 용도

  • Lilith 워크스테이션 시스템 소프트웨어: 운영체제·응용 소프트웨어 모두 Modula-2.
  • 임베디드 시스템: Delco의 엔진 제어 유닛, GLONASS 위성 등 안전 필수 영역.
  • 교육: Pascal의 후계로 대규모 프로그램 설계를 가르치는 데 사용. ETH·일부 유럽 대학에서 표준 언어.

5. 그 시대 설계 도구 매핑

Modula-2가 등장한 1978년 전후는 구조적 분석에서 모듈러 분해로 사상이 옮겨가는 전환기였다.

도구역할Modula-2와의 관계
Parnas 정보 은닉(1972)모듈 분해의 핵심 원칙 — 변경 가능한 부분을 모듈 안에 숨김Modula-2 DEFINITION/IMPLEMENTATION 분리의 직접 사상
Yourdon-Constantine 구조도결합도(Coupling) 최소화·응집도(Cohesion) 최대화모듈 단위 결합도 분석에 직접 적용
Booch Component Diagram(초기형) (1980년대 초)모듈 간 의존 관계 시각화Modula-2 IMPORT 그래프 = Booch 다이어그램
Abstract Data Type (ADT) 이론 (Liskov, Guttag 1970년대 후반)추상 자료형 — 인터페이스로만 접근DEFINITION MODULE이 ADT의 언어 구현체

→ Modula-2의 등장은 구조적 프로그래밍에서 모듈러 프로그래밍으로의 사상적 전환점이었다. Parnas의 1972 논문이 언어로 기록된 데까지 6년이 걸렸다는 점이 중요 — 설계 사상이 언어보다 항상 먼저 나온다.

6. 강의 활용

핵심 명제와의 연결: Modula-2의 모듈은 새로운 발명이 아니다. Parnas가 1972년 박은 정보 은닉 사상이 6년 후에 언어 문법으로 굳어진 것이다. 즉 설계가 먼저, 언어는 나중이라는 본 강의 명제의 정확한 사례.

강의에서의 위치: G3에서 G4로의 다리 역할. Pascal·C가 함수 단위 구조까지 갔다면, Modula-2는 모듈 단위 캡슐화까지 갔다. 한 걸음만 더 가면 클래스 단위 캡슐화 — 즉 객체지향이다. Modula-2는 G3와 G4 사이의 missing link.

오늘날의 흔적: Modula-2 자체는 산업 현장에서 거의 사라졌지만, 그 사상은 모든 현대 언어에 살아있다.

현대 언어Modula-2의 흔적
Javapackage, public/private 가시성, interface
Pythonmodule 단위 분리, __init__.py로 인터페이스 노출
Rustcrate/mod, pub 키워드, traitimpl 분리
Gopackage, 대문자 시작 변수만 export
TypeScriptexport/import, .d.ts(definition file) — 정의/구현 분리

특히 *TypeScript의 .d.ts*는 Modula-2 DEFINITION MODULE의 직계 후예이다 — 같은 사상이 50년 만에 같은 형태로 돌아왔다.

오늘 LLM 시대로의 다리: AI Agent 시스템에서 *각 Agent의 인터페이스(공개 API)*와 *내부 구현(프롬프트·툴 호출)*을 분리하는 일은 Modula-2의 DEFINITION/IMPLEMENTATION 분리와 정확히 같은 사상이다. *MCP(Model Context Protocol)*도 이 정신의 LLM 시대 구현이다 — 서버의 공개 도구만 클라이언트가 본다.

출처

  • Wikipedia, "Modula-2", https://en.wikipedia.org/wiki/Modula-2
  • Wirth, N. (1982). Programming in Modula-2. Springer-Verlag.
  • Parnas, D. L. (1972). "On the Criteria To Be Used in Decomposing Systems into Modules". Communications of the ACM, 15(12), 1053-1058.
  • ISO/IEC 10514:1996. Modula-2.

그룹 시리즈

synthesis/group-g3 (시대 그룹 종합 카드)