> For the complete documentation index, see [llms.txt](https://byulseop-til.gitbook.io/sinheeseop_til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://byulseop-til.gitbook.io/sinheeseop_til/terminology/terminology/module.md).

# Module

> *"인터페이스는 모듈이 아니다. 모듈을 꽂을 수 있는 '슬롯'이다."*

개발을 하다 보면 라이브러리, 패키지, 클래스, 인터페이스 등을 뭉뚱그려 "모듈"이라고 부르는 경우를 종종 봅니다. 하지만 엄밀한 의미에서 모듈이 무엇인지, 특히 인터페이스와는 어떤 관계인지 명확히 구분할 필요가 있습니다.

## 1. 뿌리 찾기 (Origin & Etymology)

* **어원**: 라틴어 *modulus*(작은 척도, 치수)에서 유래했습니다.
* **사전적 의미**: 전체를 구성하는 개별 단위, 교체 가능한 부품.
* **핵심**: "전체 시스템에서 떼어내도 독립적으로 존재할 수 있으며, 다른 것으로 교체할 수 있는 단위"라는 뉘앙스가 강합니다.

## 2. 맥락 잇기 (Daily & Cross-Industry)

### 레고 블록과 게임기

가장 직관적인 비유는 **닌텐도 스위치**입니다.

* **모듈 (Module)**: 실제로 꽂히는 **'젤다 게임팩'**, **'마리오 게임팩'**. (실체 O)
* **인터페이스 (Interface)**: 게임팩을 꽂는 **'슬롯의 모양'**. (실체 X, 규격 O)
* **모듈화 (Modularity)**: 규격만 맞으면 언제든 젤다를 빼고 마리오를 꽂을 수 있는 **'상태'**.

일상에서는 "이 가구는 모듈식이야"라고 하면, 내 마음대로 배치를 바꾸거나 부품을 갈아 끼울 수 있다는 뜻으로 쓰입니다.

## 3. 실무의 시선 (In Software Development)

### Developer

개발 현장에서는 편의상 "이 인터페이스 써서 모듈화했어"라고 말하곤 합니다. 하지만 기술적으로 깊이 파고들면 미묘한 오해가 생길 수 있습니다.

#### Q. 인터페이스(`Comparator` 등)는 모듈인가?

**A. 아닙니다. 엄밀히 말하면 '규격(Spec)'이자 '슬롯(Slot)'입니다.**

* 구체적인 로직(구현)이 없기 때문에 그 자체로는 부품(모듈)이 될 수 없습니다.
* 하지만 개발자들이 "모듈화했다"라고 퉁쳐서 말하는 이유는, 인터페이스가 **모듈화를 가능하게 만드는 핵심 조건**이기 때문입니다.

#### Java 8+와 람다 (SAM의 특이점)

Java 8부터 등장한 **함수형 인터페이스(SAM, Single Abstract Method)** 는 이 경계를 더 모호하게(또는 흥미롭게) 만듭니다.

* **과거 (Java 7 이전)**: 인터페이스를 구현하려면 거창하게 `class Impl implements Interface`를 만들어야 했습니다. "아, 인터페이스는 껍데기구나"가 명확했습니다.
* **현재 (Java 8 이후)**:

  ```java
  // Comparator는 껍데기(인터페이스)지만,
  // 개발자는 이 코드를 보며 "정렬 로직(모듈)"을 전달한다고 느낍니다.
  Comparator<Integer> sortRule = (a, b) -> a - b;
  ```

  여기서 `(a, b) -> a - b`라는 **코드 조각(람다식)** 이 실질적인 **'초미니 모듈'** 입니다. 인터페이스는 이 미니 모듈을 담는 그릇 역할을 하기에, 둘을 거의 한 몸처럼 취급하게 된 것입니다.

### Architecture

아키텍처 관점에서의 모듈은 **'응집도(Cohesion)'** 와 **'결합도(Coupling)'** 의 싸움입니다.

* 잘 만든 모듈은 내부가 꽉 차 있고(응집도 높음), 외부와는 느슨하게 연결(결합도 낮음)되어야 합니다.
* 이때 외부와의 연결 고리 역할을 하는 것이 바로 **인터페이스**입니다.

## 4. 내 언어로 정의하기 (My Definition)

이 내용을 종합하여 나만의 기준을 세워봅니다.

> **모듈 (Module)**
>
> 1. **인터페이스 (`Comparator`)**: 모듈이 아님. 부품을 끼우는 **규격(Spec)** 이자 **슬롯(Slot)**.
> 2. **구현체 (Class/Lambda)**: 슬롯에 딱 맞게 제작된 실제 **부품(Module)**.
> 3. **모듈화**: 규격 덕분에 언제든 부품을 갈아 끼울 수 있는 **유연한 구조**.

***

*Reference: 대화 내용을 바탕으로 재구성함.*
