# ์ค๊ณ ์์น โ ์์ / ์๋ฎฌ๋ ์ด์
/ UI 3์ธต ๋ถ๋ฆฌ
## ํ ์ค ์์ฝ
> **์์ ๋ฐ์ดํฐ + ์๋ฎฌ๋ ์ด์
๋ชจ๋ธ๋ง ์ฝ์ผ๋ฉด ์ด ํ๋ก๊ทธ๋จ์ด ๋ญ ํ๋์ง ์ ๋ถ ์ ์ ์์ด์ผ ํ๋ค.**
> UI ์ฝ๋๋ ํ ์ค๋ ์ ๋ด๋ ๋๋ค.
---
## 1. ์ธ ๊ฐ์ ์ธต
### 1-1. ์์ ๋ฐ์ดํฐ (Constant Data)
ํ๋ก๊ทธ๋จ ์คํ ์ค **์ ๋ ๋ณํ์ง ์๋** ๊ฐ.
๊ท์น์ ์ฌ๋ฃ์ด๋ฉฐ, ์๋ฎฌ๋ ์ด์
์ด ์ฐธ์กฐ๋ง ํ๋ค.
- ํ
ํ๋ฆฟ, ์คํ, ๋ฐธ๋ฐ์ค ํ
์ด๋ธ, ๊ณต์์ ๊ณ์ ๋ฑ
- ๋ฐํ์์ ์ฐ๊ธฐ(write) ๊ธ์ง. ์ฝ๊ธฐ(read) ์ ์ฉ
- ์ฝ๋ ์์ ๋งค์ง ๋๋ฒ๋ก ํฉ์ด์ง์ง ์๊ณ ํ ๊ณณ์ ๋ชจ์ธ๋ค
- ์ด ์ธต๋ง ์ฝ์ผ๋ฉด **"์ด ์ธ๊ณ์ ์ด๋ค ๊ฒ๋ค์ด ์กด์ฌํ๊ณ , ๊ฐ๊ฐ์ ์์น๊ฐ ์ผ๋ง์ธ์ง"** ์ ์ ์๋ค
### 1-2. ์๋ฎฌ๋ ์ด์
๋ชจ๋ธ (Simulation Model)
ํ๋์ ๋
๋ฆฝ์ ์ธ ์๋ฎฌ๋ ์ด์
์ **์ํ(state)** ์ **๊ท์น(logic)**.
- ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ณ์๋ฅผ ์์ ํ๋ค
- ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํด์ ์ํ๋ฅผ ๋ณ์ด(mutate)ํ๋ ํจ์๋ฅผ ๊ฐ์ง๋ค
- UI๋ฅผ ๋ชจ๋ฅธ๋ค. ํ๋ฉด, ๋ฒํผ, ์ ๋๋ฉ์ด์
, ์
๋ ฅ ์ฅ์น์ ์กด์ฌ๋ฅผ ์ ์ ํ์ง ์๋๋ค
- ์ด ์ธต์ **๋ช
๋ น(command)์ ๋ฐ์์ ์ํ๋ฅผ ๋ฐ๊พธ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์๋ฆฐ๋ค**
- ์์ ๋ฐ์ดํฐ + ์ด ์ธต๋ง ์ฝ์ผ๋ฉด **"์ด ์๋ฎฌ๋ ์ด์
์ด ์ด๋ค ์์๋ก, ์ด๋ค ๊ท์น์ ๋ฐ๋ผ ๋์๊ฐ๋์ง"** ์ ๋ถ ์ถ์ ํ ์ ์๋ค
### 1-3. UI (Presentation)
์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ณ , ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ๋ ์ธต.
- ์๋ฎฌ๋ ์ด์
์ ์ํ๋ฅผ **์ฝ์ด์ ํ๋ฉด์ ๋ฐ์**ํ๋ค
- ์ฌ์ฉ์์ ์กฐ์์ **์๋ฎฌ๋ ์ด์
์ ๋ช
๋ น์ผ๋ก ๋ฒ์ญ**ํด์ ์ ๋ฌํ๋ค
- ์๊ธฐ ์์ ์ ํ์ ์ํ(์ ๋๋ฉ์ด์
์งํ, ํจ๋ ์ด๋ฆผ/๋ซํ ๋ฑ)๋ ์์ ๋กญ๊ฒ ๊ฐ์ง๋ค
- ์๋ฎฌ๋ ์ด์
์ ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ง ์๋๋ค
---
## 2. ์ธต ์ฌ์ด์ ๊ท์น
### ์์กด ๋ฐฉํฅ์ ํ์ชฝ๋ฟ์ด๋ค
```
์์ ๋ฐ์ดํฐ โ ์๋ฎฌ๋ ์ด์
๋ชจ๋ธ โ UI
```
- ์์ ๋ฐ์ดํฐ๋ ์๋ฌด๊ฒ๋ ๋ชจ๋ฅธ๋ค
- ์๋ฎฌ๋ ์ด์
์ ์์ ๋ฐ์ดํฐ๋ง ์๋ค. UI๋ฅผ ๋ชจ๋ฅธ๋ค
- UI๋ ์์ ๋ฐ์ดํฐ์ ์๋ฎฌ๋ ์ด์
๋ ๋ค ์๋ค
์ญ๋ฐฉํฅ ์์กด์ ๊ธ์งํ๋ค. ์๋ฎฌ๋ ์ด์
์ด "์ง๊ธ ์ด๋ค ํ๋ฉด์ด ์ด๋ ค ์๋์ง" ์๋ฉด ์ ๋๋ค.
### ์๋ฎฌ๋ ์ด์
์ ์ค์ค๋ก ์๊ฒฐ๋๋ค
์๋ฎฌ๋ ์ด์
์ ์ํ ์ ์ด๊ฐ UI์ ํธ์ถ์ ์์กดํด์ ์ ๋๋ค.
- **์๋ฐ ์์**: ์นด๋๋ฅผ ์ฌ์ฉํ ๋ค, UI๊ฐ "์ ํฌ ๋๋ฌ๋์ง ํ์ธํด์ค"๋ฅผ ํธ์ถํด์ผ๋ง ์ข
๋ฃ ํ์ ์ด ์ผ์ด๋จ
- **์ฌ๋ฐ๋ฅธ ์์**: ์นด๋ ์ฌ์ฉ ํจ์ ๋ด๋ถ์์ ์ข
๋ฃ ์กฐ๊ฑด์ ์ค์ค๋ก ๊ฒ์ฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๋ฆผ
UI๊ฐ ํน์ ์์๋ก ํน์ ํจ์๋ฅผ ํธ์ถํด์ค์ผ๋ง ์๋ฎฌ๋ ์ด์
์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๊ตฌ์กฐ๋,
์๋ฎฌ๋ ์ด์
์ ๊ท์น์ด UI ์ฝ๋์ ์ ์ถ๋ ๊ฒ์ด๋ค.
### ์๋ฎฌ๋ ์ด์
์ ์ํ์ UI ๊ด์ฌ์ฌ๋ฅผ ๋ฃ์ง ์๋๋ค
- **์๋ฐ ์์**: ์๋ฎฌ๋ ์ด์
์ํ์ `phase = "title"`, `phase = "map_screen"` ๊ฐ์ ํ๋ฉด ์ด๋ฆ์ด ๋ค์ด๊ฐ
- **์ฌ๋ฐ๋ฅธ ์์**: ์๋ฎฌ๋ ์ด์
์ `state = "idle"`, `state = "in_combat"` ๊ฐ์ ๊ฒ์ ์ํ๋ง ๊ฐ์ง๊ณ , ์ด๋ค ํ๋ฉด์ ๋ณด์ฌ์ค์ง๋ UI๊ฐ ๋งคํํจ
ํ๋ณ ๊ธฐ์ค: **"์ด ์ํ๊ฐ์ด ํฐ๋ฏธ๋(CLI) ํ๊ฒฝ์์๋ ์๋ฏธ๊ฐ ์๋๊ฐ?"**
"title_screen"์ ํฐ๋ฏธ๋์์ ์๋ฏธ๊ฐ ์๋ค. "์ ํฌ ์ค"์ ํฐ๋ฏธ๋์์๋ ์๋ฏธ๊ฐ ์๋ค.
---
## 3. ๋
๋ฆฝ์ ์ธ ์๋ฎฌ๋ ์ด์
์ ๊ฒฝ๊ณ
ํ๋ก๊ทธ๋จ ์์ ์๋ฎฌ๋ ์ด์
์ด ์ฌ๋ฌ ๊ฐ ์์ ์ ์๋ค.
๊ฐ ์๋ฎฌ๋ ์ด์
์ **์๋ก ๋ค๋ฅธ ๊ด์ฌ์ฌ**๋ฅผ ๋ค๋ฃจ๋ฉฐ, ๊ฐ์์ ์ํ์ ๊ท์น์ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ์ง๋ค.
### ๊ฒฝ๊ณ๋ฅผ ์ด๋ป๊ฒ ๋๋๋๊ฐ
ํ๋์ ์๋ฎฌ๋ ์ด์
์ด ๋ค๋ฃจ๋ ๋ฒ์๋ **"ํ๋์ ๊ท์น ์ฒด๊ณ ์์์ ์ผ์ด๋๋ ์ํ ๋ณํ์ ๋จ์"** ์ด๋ค.
์๋ฅผ ๋ค์ด:
- ์ ํฌ ํ ํ์ ํด ์งํ, ์นด๋ ์ฌ์ฉ, ๋ฐ๋ฏธ์ง ๊ณ์ฐ โ ํ๋์ ์๋ฎฌ๋ ์ด์
- ๋ฐ ์ ์ฒด์ ๋
ธ๋ ์ด๋, ์์ ๊ด๋ฆฌ, ์ ํฌ ๊ฒฐ๊ณผ ๋ฐ์ โ ๋ณ๊ฐ์ ์๋ฎฌ๋ ์ด์
- ์์ ์์์ ๊ตฌ๋งค/ํ๋งค โ ๋ณ๊ฐ์ ์๋ฎฌ๋ ์ด์
### ์๋ฎฌ๋ ์ด์
๊ฐ ํต์
- ์๋ฎฌ๋ ์ด์
๋ผ๋ฆฌ ์ง์ ์ํ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ์ง ์๋๋ค
- ํ ์๋ฎฌ๋ ์ด์
์ด ๋๋๋ฉด **๊ฒฐ๊ณผ(result)** ๋ฅผ ๋ฐํํ๋ค
- ์์ ์๋ฎฌ๋ ์ด์
์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์๊ธฐ ์ํ์ ๋ฐ์ํ๋ค
```
๋ฐ ์๋ฎฌ๋ ์ด์
โ ์ ํฌ ์๋ฎฌ๋ ์ด์
์์(์
๋ ฅ ์ ๋ฌ)
์ ํฌ ์๋ฎฌ๋ ์ด์
โ ๊ฒฐ๊ณผ ๋ฐํ {์นํจ, ์์ฌ HP, ...}
๋ฐ ์๋ฎฌ๋ ์ด์
โ ๊ฒฐ๊ณผ๋ฅผ ์๊ธฐ ์ํ์ ๋ฐ์
```
---
## 4. ๊ฒ์ฆ ๊ธฐ์ค
์์น์ด ์ง์ผ์ง๊ณ ์๋์ง ํ์ธํ๋ ์๊ฐ ์ ๊ฒ ํญ๋ชฉ.
### ์ฝ๊ธฐ ํ
์คํธ
์์ ๋ฐ์ดํฐ ํ์ผ๊ณผ ์๋ฎฌ๋ ์ด์
๋ชจ๋ธ ํ์ผ๋ง ์ด์ด์, ๋ค์ ์ง๋ฌธ์ ์ ๋ถ ๋ตํ ์ ์๋๊ฐ:
- ์ด ์๋ฎฌ๋ ์ด์
์ ์ด๋ค ์ํ๊ฐ ์๋๊ฐ?
- ์ด๋ค ์
๋ ฅ(๋ช
๋ น)์ ๋ฐ์ ์ ์๋๊ฐ?
- ๊ฐ ๋ช
๋ น์ ์คํํ๋ฉด ์ํ๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋๊ฐ?
- ์ด๋ค ์กฐ๊ฑด์์ ์๋ฎฌ๋ ์ด์
์ด ๋๋๋๊ฐ?
ํ๋๋ผ๋ "UI ์ฝ๋๋ฅผ ๋ด์ผ ์ ์ ์๋ค"๋ฉด ์๋ฐ์ด๋ค.
### ๊ต์ฒด ํ
์คํธ
UI๋ฅผ ํต์งธ๋ก ๋ค๋ฅธ ๊ฒ์ผ๋ก ๊ต์ฒดํด๋ ์๋ฎฌ๋ ์ด์
์ด ์ ํํ ๋์ผํ๊ฒ ์๋ํ๋๊ฐ?
์: GUI โ ํ
์คํธ CLI, ๋๋ GUI โ ์๋ํ ํ
์คํธ ํ๋ค์ค
### ์ญ์ ํ
์คํธ
UI ํ์ผ์ ์ ๋ถ ์ญ์ ํ์ ๋, ์๋ฎฌ๋ ์ด์
๋ชจ๋ธ์ ์ปดํ์ผ ์๋ฌ๊ฐ ์๊ธฐ๋๊ฐ?
์๊ธด๋ค๋ฉด ์ญ๋ฐฉํฅ ์์กด์ด ์กด์ฌํ๋ ๊ฒ์ด๋ค.
---
## 5. ํ์ฉ / ๋ถํ ๊ฒฝ๊ณ์ ์ ๋ฆฌ
| ์ํฉ | ํ์ฉ ์ฌ๋ถ |
|---|---|
| ์๋ฎฌ๋ ์ด์
์ด ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค | โ
|
| UI๊ฐ ์๋ฎฌ๋ ์ด์
์ํ๋ฅผ ์ฝ๋๋ค | โ
|
| UI๊ฐ ์๋ฎฌ๋ ์ด์
์ ๋ช
๋ น์ ๋ณด๋ธ๋ค | โ
|
| UI๊ฐ ์์ฒด ํ์ ์ํ๋ฅผ ๊ฐ๋๋ค (์ ๋๋ฉ์ด์
, ํจ๋ ์ด๋ฆผ ๋ฑ) | โ
|
| ์๋ฎฌ๋ ์ด์
์ด ์์ฒด ์ํ ๋ณ์ด ํ ์ค์ค๋ก ํ์ ํ์ ์ ํ๋ค | โ
|
| ์๋ฎฌ๋ ์ด์
์ด UI ํจ์๋ฅผ ํธ์ถํ๋ค | โ |
| ์๋ฎฌ๋ ์ด์
์ํ์ ํ๋ฉด/๋ ์ด์์ ์ด๋ฆ์ด ๋ค์ด๊ฐ๋ค | โ |
| UI๊ฐ ์๋ฎฌ๋ ์ด์
์ํ๋ฅผ ์ง์ ์์ ํ๋ค | โ |
| ์๋ฎฌ๋ ์ด์
์ ๊ท์น ์ผ๋ถ๊ฐ UI ์ฝ๋ ์์๋ง ์กด์ฌํ๋ค | โ |
| ์๋ฎฌ๋ ์ด์
๋ผ๋ฆฌ ์๋ก์ ๋ด๋ถ ์ํ๋ฅผ ์ง์ ์ฝ๊ณ ์ด๋ค | โ |
# ๊ฒฝ๊ณ๋ฅผ ์ด๋์ ๊ทธ์ ๊ฒ์ธ๊ฐ
> ์๋ฅธ ์กฐ๊ฐ์ ์ด์ด๋ถ์ด๊ธฐ๋ง ํ๋ฉด ์ํ๋ ๊ฒ์ด ์์ฑ๋๋๋ก ์๋ฅด๋ ๊ฒ. ๊ทธ๊ฒ์ด ์ค๊ณ๋ค.
-----
## ์ ์ : ๋ฐ์ดํฐ์ ๋ทฐ๋ ๋๋๋ค
๋ทฐ๋ ๋ฐ์ดํฐ์ ํฌ์์ด๋ค. ๋ฐ์ดํฐ๊ฐ ์๊ฒฐ๋๋ฉด ๋ทฐ๋ฅผ ๋ถ์ด๋ ๊ฒ์ ์ด๋ ต์ง ์๋ค. ๋ทฐ์์ ์ํคํ
์ฒ๊ฐ ๋ฌด๋์ง๋ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๋ฐ์ดํฐ๊ฐ ์๊ฒฐ๋์ง ์์์ ๋ทฐ๊ฐ ๋ก์ง์ ๋ ์๊ฒ ๋ ๊ฒฝ์ฐ๋ค. ์ด ๋ถ๋ฆฌ๋ ์์์ด๋ฏ๋ก ๋ ์ด์ ๋
ผํ์ง ์๋๋ค.
-----
## ์ง์ง ๋ฌธ์ : ๋ฉ์ธ ๋ชจ๋ธ์ ์์ ๊ถ
๋ฐ์ดํฐ์ ๋ทฐ๋ฅผ ๋๋ ํ, ๋ฐ์ดํฐ ์ชฝ ๋ด๋ถ๋ฅผ ๋ค์ ์๋ฅด๋ ๊ฒ โ ์ฌ๊ธฐ์ ์ค๊ณ ์ญ๋์ด ๊ฐ๋ฆฐ๋ค.
๋ชจ๋ ์์คํ
์๋ ๋ฉ์ธ ๋ชจ๋ธ์ด ์๋ค. ์์คํ
์ ์ฒด์ ์์ ์ํ๋ฅผ ๋ค๊ณ ์๋ ํ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ค. ๊ฒ์์ด๋ฉด ๋ฐ ์ํ, ์น์ด๋ฉด ์ธ์
, ์๋ํฐ๋ผ๋ฉด ๋ฌธ์. ์ด ๋ฉ์ธ ๋ชจ๋ธ์ด ๋ฐ์ดํฐ์ ์ฃผ์ธ์ด๋ค.
์ค๊ณ์ ํต์ฌ ์ง๋ฌธ์ **"์ด ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ ์์ ํ๋๊ฐ"**์ด๋ค. ๋ต์ ํญ์ ๋ฉ์ธ ๋ชจ๋ธ์ด์ด์ผ ํ๋ค. ์๋ธ ์์คํ
์ ๋ฉ์ธ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ **๋น๋ ค ์ฐ๊ณ ๋๋ ค์ฃผ๋** ํจ์๋ค. ์๊ธฐ ์์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์๋๋ค.
```
๋ฉ์ธ ๋ชจ๋ธ โโ(๋ฐ์ดํฐ ์ ๋ฌ)โโโ ์๋ธ ์์คํ
โโ(๋ณํ๋ ๋ฐ์ดํฐ ๋ฐํ)โโโ ๋ฉ์ธ ๋ชจ๋ธ
```
์๋ธ ์์คํ
์ ์คํ ์ค์๋ง ์กด์ฌํ๋ ์์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค. ํ์ง๋ง ๋๋๋ฉด ์ ๋ฆฌํด์ ๋ฉ์ธ ๋ชจ๋ธ์ด ์ดํดํ๋ ํํ๋ก ๋๋ ค์ฃผ๊ณ ์ฌ๋ผ์ง๋ค.
-----
## ๋๊ธฐํ๋ ๊ฒฝ๊ณ ์คํจ์ ์งํ๋ค
์๋ธ ์์คํ
์ด ๋ฉ์ธ ๋ชจ๋ธ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ์ ์ฌ๋ณธ์ ๋ค๊ณ ์์ผ๋ฉด, ๋๊ธฐํ๊ฐ ํ์ํด์ง๋ค. A๋ฅผ ๊ณ ์ณค๋๋ฐ B๋ ๊ณ ์ณ์ผ ํ๊ณ , ๊ทธ ์์๊ฐ ์ค์ํ๊ณ , ๋น ๋จ๋ฆฌ๋ฉด ๋ถ์ผ์น๊ฐ ์๊ธด๋ค.
๋๊ธฐํ๊ฐ ํ์ํ ์๊ฐ, ๊ฒฝ๊ณ๊ฐ ์๋ชป ๊ทธ์ด์ง ๊ฒ์ด๋ค. ๋ฐ์ดํฐ์ ์์ ๊ถ์ด ๋ถ์ฐ๋์ด ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํด๊ฒฐ์ ์์ ๊ถ์ ํ ๊ณณ์ ๋ชจ์ผ๋ ๊ฒ์ด๋ค. ๋ฉ์ธ ๋ชจ๋ธ์ด ์ ์ผํ ์ฃผ์ธ์ด๊ณ , ์๋ธ ์์คํ
์ ๋น๋ ค ์ฐ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐํ ์์ฒด๊ฐ ์กด์ฌํ์ง ์๋๋ค. ๋๊ธฐํํ ๋์์ด ์์ผ๋๊น.
```
์๋ชป๋ ๊ตฌ์กฐ:
๋ฉ์ธ โโ ์๋ธA (deck ์ฌ๋ณธ ๋ณด์ )
๋ฉ์ธ โโ ์๋ธB (deck ์ฌ๋ณธ ๋ณด์ )
โ A๊ฐ deck์ ๋ฐ๊พธ๋ฉด B์ deck๋ ๋ง์ถฐ์ผ ํ๋ค
์ฌ๋ฐ๋ฅธ ๊ตฌ์กฐ:
๋ฉ์ธ (deck ์์ )
์๋ธA: f(deck) โ deck' โ ๋น๋ ค ์ฐ๊ณ ๋๋ ค์ค
์๋ธB: g(deck') โ deck'' โ ์ด๋ฏธ ๋ฐ์๋ ๊ฑธ ๋ฐ์
โ ๋๊ธฐํ ์์
```
-----
## ์๋ธ ์์คํ
์ ๋ณต์ก๋๊ฐ ๊ฒฝ๊ณ๋ฅผ ์ ๋นํํ๋ค
์๋ธ ์์คํ
์ด ๋ณ๋ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ง ์๊ฒฉ์ด ์์ผ๋ ค๋ฉด, ๋ด๋ถ์ ์์ฒด์ ์ธ ๋ฃจํ๋ ์ํ ์ ์ด๊ฐ ์์ด์ผ ํ๋ค. ๋จ์ํ ๋ณํ โ ๊ฐ์ ๋ฐ์์ ๊ณ์ฐํ๊ณ ๋๋ ค์ฃผ๋ ๊ฒ โ ์ ๋ฉ์ธ ๋ชจ๋ธ ๋ด๋ถ์ ํจ์๋ฉด ์ถฉ๋ถํ๋ค. ๊ฒฝ๊ณ๋ฅผ ์ธ์ฐ๋ฉด ๊ฒฝ๊ณ ์ ์ง ๋น์ฉ์ด ๋ด์ฉ๋ฌผ๋ณด๋ค ์ปค์ง๋ค.
๊ธฐ์ค: **์๋ธ ์์คํ
๋ด๋ถ๋ฅผ ๋ ์๋ผ์ผ ํ ๋งํผ ๋ณต์กํ๊ฐ?** ๊ทธ๋ ๋ค๋ฉด ๊ฒฝ๊ณ๊ฐ ์ ๋นํ๋ค. ์๋๋ผ๋ฉด ๋ฉ์ธ ๋ชจ๋ธ์ ํจ์๋ก ๋จ๊ฒจ๋๋ค.
-----
## ์๋ฅด๋ ๊ธฐ์ค์ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ค
์ด๋ค ์์คํ
์ด๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๊ณ , ๋ณํ๋๊ณ , ๋๊ฐ๋ค. ์๋ฅด๋ ๊ธฐ์ค์ **๋ฐ์ดํฐ์ ํํ๊ฐ ๋ฐ๋๋ ์ง์ **์ด๋ค.
```
๋ฒํผ ๋๋ฆผ โ ์ด๋ ์๋(๋ฐฉํฅ+์๋) โ ๋ฌผ๋ฆฌ์ ์์น ๋ณํ โ ๋ ๋ ์ปค๋งจ๋
```
๊ฐ ํ์ดํ๊ฐ ๋ฐ์ดํฐ ํํ์ ์ ํ์ด๊ณ , ๊ทธ ์ ํ์ ์ด ๊ฒฝ๊ณ ํ๋ณด๋ค. "์ด ์ง์ ์์ ์๋ฅด๋ฉด ์์ชฝ์ด ์๋ก์ ๋ด๋ถ๋ฅผ ๋ชฐ๋ผ๋ ๋๋๊ฐ?"๊ฐ ํ๋จ ๊ธฐ์ค์ด๋ค.
์ด๋ ์๋ โ ๋ฌผ๋ฆฌ์ ์์น ๋ณํ์์ ์๋ฅด๋ฉด, ์ด๋ ์๋ ๋ชจ๋์ ๋ฐฉํฅ+์๋๋ฅผ ๋ด๋๊ณ ๋ฌผ๋ฆฌ ๋ชจ๋์ ๋ฐฉํฅ+์๋๋ฅผ ๋ฐ๋๋ค. ๋ณ๋ ๋ณํ ์์ด ๊ฝํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์๋ฑํ ๋ฐ์ ์๋๋ค๋ฉด โ ์๋ฅผ ๋ค์ด ํค๋ณด๋ ์
๋ ฅ๊ณผ ๋ง์ฐ์ค ์
๋ ฅ ๊ธฐ์ค์ผ๋ก ๋๋ด๋ค๋ฉด โ ์์ชฝ ๋ค "์ด๋ ์๋"๋ฅผ ๊ฐ์ ๋ง๋ค์ด์ผ ํ๊ณ , ํฉ์น๋ ๋ณํ์ด ์๊ธด๋ค.
์ ์๋ฅธ ์กฐ๊ฐ์ A์ ์ถ๋ ฅ ํํ๊ฐ B์ ์
๋ ฅ ํํ์ ์ด๋ฏธ ์ผ์นํ๋ค. ๋ณ๋ ๋ณํ ์์ด ๊ฝํ๋ค.
"์ด๊ฒ ํ์ค์์ ๋ญ์ฒ๋ผ ์๊ฒผ๋์ง"๊ฐ ์๋๋ผ "๋ฐ์ดํฐ๊ฐ ์ฌ๊ธฐ์ ๋๊ธฐ๋์ง"๊ฐ ๊ธฐ์ค์ด๋ค. **"์ด๋์ ์๋ฅด๋๋"๊ฐ ๋ชจ๋์ฑ์ ๊ฒฐ์ ํ๋ ๊ฒ์ด์ง, ๋ชจ๋ํ ๊ธฐ๋ฒ์ ์ ์ฉํ๋ค๊ณ ๋ชจ๋์ฑ์ด ์๊ธฐ๋ ๊ฒ ์๋๋ค.**
-----
## DOD์ OOP๋ ๋๋ฆฝ์ด ์๋๋ค
ํํ ์คํด: "๋ฐ์ดํฐ ์งํฅ์ด๋ฉด ๊ฐ์ฒด๋ฅผ ์ฐ๋ฉด ์ ๋๋ค." ์๋๋ค.
DOD๊ฐ ๋งํ๋ ๊ฑด "๊ฐ์ฒด๋ฅผ ์ฐ์ง ๋ง๋ผ"๊ฐ ์๋๋ผ **"๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ํ๋ฅด๊ณ ๋ณํ๋๋์ง๋ฅผ ๋จผ์ ์ดํดํ๋ผ"**์ด๋ค. ๊ทธ๊ฑด ์นผ์ง์ ๊ธฐ์ค์ด์ง, ์นผ์ง์ ๊ฒฐ๊ณผ๋ฌผ์ด ์๋๋ค. ๊ฒฐ๊ณผ๋ฌผ์ ํด๋์ค์ผ ์ ์๊ณ , ๋ชจ๋์ผ ์ ์๊ณ , ์ปดํฌ๋ํธ์ผ ์ ์๋ค.
๋ฌธ์ ๊ฐ ๋๋ ๊ฑด OOP๋ฅผ "ํ์ค ์ธ๊ณ์ ๋ถ๋ฅ ์ฒด๊ณ"์์ ์์ํ๋ ๊ฒ์ด๋ค. ๊ฐ๋ น ๊ฒ์์ ์ ์ฌ, ๋ง๋ฒ์ฌ, ๊ถ์๊ฐ ์์ผ๋ฉด ๊ฐ๊ฐ์ ๋ณ๋ ํด๋์ค๋ก ๋ง๋ค์ด์ผ ํ ๊ฒ ๊ฐ์ง๋ง, ๋ฐ์ดํฐ ํ๋ฆ์ ๋ณด๋ฉด ์
๋ค (์คํฏ, ์ฅ๋น, ์คํฌ ๋ชฉ๋ก)์ด๋ผ๋ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฑฐ์ณ ๊ฐ์ ์ ํฌ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ค์ด๊ฐ๋ค. ๋๋ ์ด์ ๊ฐ ์๋ ๊ฑธ ๋๋๋ฉด ์บ๋ฆญํฐ ํ์
๋ง๋ค ์ค๋ณต ๋ก์ง์ด ์๊ธด๋ค. ๋ฐ๋๋ก, ์ธ๋ฒคํ ๋ฆฌ์ ์ฅ๋น ์์คํ
์ ๊ฒ๋ณด๊ธฐ์ "์์ดํ
"์ด๋ผ๋ ํ๋์ ๊ฐ๋
๊ฐ์ง๋ง, ์ธ๋ฒคํ ๋ฆฌ๋ ์์ ์ ์๋์ ๋ฐ์ดํฐ์ด๊ณ ์ฅ๋น๋ ์ฌ๋กฏ ๋งคํ๊ณผ ์คํฏ ๋ณํ์ ๋ฐ์ดํฐ๋ค. ํ๋ฆ์ด ๋ค๋ฅด๋ฏ๋ก ๋๋ ์ผ ํ๋ค.
**๊ฐ์ฒด๋ฅผ ๋๋๋ ๊ธฐ์ค์ ๋ฐ์ดํฐ์ ํ๋ฆ์ด์ด์ผ์ง, ๊ฐ๋
์ ๋ถ๋ฅ๊ฐ ์๋๋ค.** ๋จ, ์ด๋ฐ ํ๋จ์ ํ๋ค์ด ์ค๊ณ ๋จ๊ณ์์ ์ฒ์ ๋์ค๋ ๊ฒ์ด ์๋๋ค. ๋ฐ์ดํฐ์ ์ค์ ํํ์ ์ฐ์ฐ์ ๋ฐํ
์
์ผ๋ก ํ์ธํ๋ ๊ณผ์ ์์ ์ด๋ฏธ ๋
ผ์๋์ด์ผ ํ ์ผ์ด๋ค.
-----
## ํจํด ํ
ํ๋ฆฟ์ผ๋ก ์๋ฅด์ง ๋ง๋ผ
๋์์ธ ํจํด์ ๋ณธ์ง์ ์ผ๋ก "์ด ๋ชจ์์ผ๋ก ์๋ฅด๋ฉด ๋๋ค"๋ ๊ธฐ์ฑ ์นผ์ง ํ
ํ๋ฆฟ์ด๋ค. ์ํ๋ ์ฌ๋์ผ์๋ก ํจํด์ ํ์์ ์ธ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค.
์๋ จ๋ ์ค๊ณ์๋ ๋ฌธ์ ์ ๋ฐ์ดํฐ ํ๋ฆ์์ ๊ฒฝ๊ณ๋ฅผ ๋ฐ๊ฒฌํ๋ค. ํจํด์ ๋จผ์ ๋ค๊ณ ์ค๋ฉด ๋ฌธ์ ์ ์์ฐ์ค๋ฌ์ด ๊ฒฝ๊ณ๊ฐ ์๋๋ผ ํจํด์ ๊ฒฝ๊ณ์ ๋ง์ถ๊ฒ ๋๋ค. ์์๊ฐ ๋ค์งํ๋ ๊ฒ์ด๋ค.
ํจํด์ ์๋ ๊ฒ๊ณผ ์ ์ฉํ๋ ๊ฒ์ ๋ค๋ฅด๋ค. ์ํ๋ ์ฌ๋์ ํจํด์ ์์ฃผ ์ ์๋ฉด์๋ ์ ์ด๋ค. ๋ชจ๋ฅด๋๊น ์ ์ฐ๋ ๊ฒ ์๋๋ผ ์์์ ์ ์ฐ๋ ๊ฒ์ด ์๋ จ์ด๋ค.
-----
## ๊ฒฝ๊ณ๊ฐ ์์
๋ถ๋ฐฐ๋ฅผ ๊ฒฐ์ ํ๋ค
๊ฒฝ๊ณ๊ฐ ์ ๊ทธ์ด์ ธ ์์ผ๋ฉด ์์
๋ถ๋ฐฐ๋ ์๋ช
ํ๋ค. ๊ฐ ์กฐ๊ฐ์ด ์๋ก์ ๋ด๋ถ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ฏ๋ก, ์กฐ๊ฐ ๋จ์๋ก ์ฌ๋์๊ฒ ๋๊ธฐ๋ฉด ๋๋ค. ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ ํํ๋ง ํฉ์ํ๋ฉด, ๋ด๋ถ ๊ตฌํ์ ๊ฐ์ ์์์ ํด๋ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ง๋ฌผ๋ฆฐ๋ค.
**์์
๋ถ๋ฐฐ๋ ์ค๊ณ์ ๊ฒฐ๊ณผ๋ฌผ์ด์ง, ๋ณ๋์ ์์ฌ๊ฒฐ์ ์ด ์๋๋ค.** ์ ์๋ฅด๋ฉด ์๋ช
ํ๊ณ , ๋ชป ์๋ฅด๋ฉด ๊ฐ๋ง์๋ค.
-----
## ๊ฒฝ๊ณ๋ฅผ ๋ค์ ๊ธ๋ ํ์ด๋ฐ
๊ฒฝ๊ณ๋ ํ ๋ฒ ๊ธ๊ณ ๋์ด ์๋๋ค. ๊ตฌํ ๊ณผ์ ์์ ํ๋ ธ์์ด ๋๋ฌ๋๋ค.
์งํ๋ ๋ช
ํํ๋ค. ํ ์กฐ๊ฐ์ ๊ณ ์ณค๋๋ฐ ๋ค๋ฅธ ์กฐ๊ฐ์ด ๊นจ์ง๋ค. ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด ์ธ ๊ฐ์ ๋ชจ๋์ ๋์์ ์ด์ด์ผ ํ๋ค. ๋ ๋ชจ๋ ์ฌ์ด์ ๋๊ธฐํ ์ฝ๋๊ฐ ์๊ฒผ๋ค. ์ ๋ถ ๊ฒฝ๊ณ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ์ด๊ธ๋ ์๋ค๋ ์ ํธ๋ค.
์ด๋ ํด์ผ ํ ์ผ์ ์ฐํ ์ฝ๋๋ฅผ ์ ๊ตํ๊ฒ ๋ง๋๋ ๊ฒ ์๋๋ผ ๊ฒฝ๊ณ๋ฅผ ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค. ๊ฒฝ๊ณ๋ฅผ ๋ค์ ๊ธ๋ ๋น์ฉ์ ์๊ฐ์ด ๊ฐ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ๋์ ์งํ๊ฐ ๋ณด์ด๋ ์ฆ์ ์์ง์ฌ์ผ ํ๋ค. ๋ฆ์์๋ก "์ฐจ๋ผ๋ฆฌ ์๋ก ๋ง๋ค์"๊ฐ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด ๋๋๋ฐ, ๊ทธ๊ฑด ์ค๊ณ๋ฅผ ๋ค์ ํ๊ฒ ๋ค๋ ๋ง์ด์ง ๊ตฌํ์ ๋ค์ ํ๊ฒ ๋ค๋ ๋ง์ด ์๋๋ค.
-----
์ฌ๊ธฐ์๋ถํฐ๋ ์ฒด๊ณํํ ์ ์๋ค. ๊ฐ๊ฐ์ ์์ญ. ํ๋ ์์ ์ฌ๊ธฐ๊น์ง๋ค.
์ด๋ ๊ฒ 2๊ฐ ์๋จ์ md ํ์ผ๋ก ๋ง๋ค์ด ๋๊ณ ์ฐธ๊ณ ํ๋ผ๊ณ ํ๊ณ , ๊ฐ๋ ๋๊ฑด ๊ฒ๊ฑด ํด๊น๋ ค์ ์ข ์ฐ๋น ๋๊ฑฐ ์๋ ์ดํด๋ณด๊ธฐ๋ ํ๊ณ ํจ.
๋๊ธ 1