---
title: "EOS Ch4 — 개념의 구조"
tags: [source, EOS]
source: "The Essence of Software, Daniel Jackson (2021)"
chapter: "Ch4 Concept Structure"
updated: 2026-04-30
---

# EOS Ch4 — 개념의 구조

## 핵심 아이디어

개념(concept)은 다섯 가지 구성 요소로 정밀하게 정의할 수 있다: 이름(name), 목적(purpose), 상태(state), 행동(actions), 운영 원칙(operational principle). 이 구조는 개념을 서로 독립적으로 이해·설계·구현할 수 있게 하며, 재사용성의 토대가 된다. Jackson은 *trash*, *style*, *reservation* 세 개념을 예시로 구조를 설명한다.

## 개념 정의의 5요소

| 요소 | 설명 |
|------|------|
| **이름(name)** | 개념 이름과 타입 파라미터 (제네릭) |
| **목적(purpose)** | 개념이 존재하는 이유를 한 문장으로 |
| **상태(state)** | 개념이 기억하는 데이터 구조 |
| **행동(actions)** | 상태를 변경하는 동작과 전제 조건 |
| **운영 원칙(operational principle)** | 목적이 실제로 달성되는 전형적 사용 시나리오 |

운영 원칙은 가장 단순한 시나리오가 아니라, **목적의 성취를 증명하는 최소 시나리오**다.

## 예시 1: trash 개념

Apple이 1982년 Lisa 컴퓨터를 위해 발명한 *trash* 개념.

**목적**: 삭제의 취소(undoing of deletions)를 허용한다.

**상태**: `accessible` (접근 가능한 아이템 집합), `trashed` (삭제됐지만 영구 제거 전 아이템 집합)

**주요 행동**:
- `delete(x)` — x를 accessible에서 trashed로 이동 (전제: x가 accessible에 있을 것)
- `restore(x)` — x를 trashed에서 accessible로 이동
- `empty()` — trashed의 모든 항목 제거

**운영 원칙**:
```
after delete(x), can restore(x) and then x in accessible
after delete(x), can empty() and then x not in accessible or trashed
```

> "The real innovation… is not that you can move things *into* the trash, but that you can then move them *out*."

### Trash 개념의 설계 결함과 수정

- **문제 1**: macOS에 trash가 하나뿐이라, 외장 드라이브의 파일을 지워도 영구 삭제가 안 됨. OS X El Capitan(2015)에서 "즉시 삭제" 액션으로 해결.
- **문제 2**: trash 안 파일을 삭제 날짜순으로 정렬할 수 없었음. OS X Lion(2011)에서 "added date" 정렬로 해결 (folder 개념의 synergy).

## 예시 2: style 개념

Adobe InDesign, Microsoft Word 등 문서 편집 도구의 *style* 개념.

**목적**: 요소들의 일관된 서식(formatting) 적용을 쉽게 한다.

**상태**:
- `assigned: Element -> one Style` (요소에 할당된 스타일)
- `defined: Style -> one Format` (스타일에 정의된 서식)
- `format: Element -> one Format = assigned.defined` (파생 상태)

**주요 행동**:
- `assign(e, s)` — 요소 e에 스타일 s 할당
- `define(s, f)` — 스타일 s의 서식을 f로 정의 (생성 또는 업데이트)

**운영 원칙**: s를 서식 f로 정의하고, e1·e2에 s를 할당한 뒤 s를 f'로 재정의하면, e1과 e2 모두 f'로 변경된다.

### Style이 아닌 것들

- Apple color picker: 색상 수정 불가 → 운영 원칙 실패 → *style* 개념 아님
- Apple TextEdit의 "style": 스타일을 적용해도 단락에 지속적으로 연결되지 않음 → *style* 개념 아님

## 예시 3: reservation 개념

소프트웨어 이전부터 존재하는 *reservation* 개념.

**목적**: 한정된 자원의 효율적 사용을 관리한다.

**상태**:
- `available: set Resource`
- `reservations: User -> set Resource` (1:다 매핑)

**주요 행동**:
- `reserve(u, r)` — r이 available일 때, u에게 r을 예약
- `cancel(u, r)` — u의 r 예약 취소, r을 available로 반환
- `use(u, r)` — u가 예약한 r 사용

**운영 원칙**: `after reserve(u, r) and not cancel(u,r), can use(u, r)`

### 설계 이슈들

- 자원은 시간대에 종속될 수 있음 (레스토랑 좌석 예약)
- no-show 처리 — 계정 정지 등
- 충돌 예약 방지 (같은 날 밤 두 레스토랑 동시 예약)
- 철도 신호 시스템, 네트워크 RSVP 프로토콜에도 동일 개념 적용

## 개념의 제네릭성

개념 이름 옆의 타입 파라미터(예: `trash [Item]`)는 개념이 제네릭임을 나타낸다. *trash*의 Item은 파일 시스템에서는 파일, 이메일 클라이언트에서는 메시지가 된다. 제네릭성은:
- 재사용을 가능하게 한다
- 개념을 본질로 추출하도록 강제한다

## 핵심 인용

> "A concept definition includes its name, purpose, state, actions and operational principle. The operational principle, showing how the behavior fulfills the purpose, is the key to understanding a concept."

> "Most concepts in widespread use have undergone extensive development and refinement over time."

> "Concepts can be designed and understood independently of one another, simplifying software design by allowing a design to be broken into distinct subproblems."

## 관련 개념

- [[EOS-ch5-concept-purposes]] — 목적(purpose)에 대한 심층 논의
- [[EOS-ch6-concept-composition]] — 개념 조합과 동기화
- [[EOS-part3-principles]] — 특정성·친숙성·무결성 원칙
- [[EOS-overview]] — 전체 개요
