# π¨ λμμΈ ν¨ν΄ μ€ν°λ
<br>

<br>
## π₯ μ€ν°λ μμ½
- [REFACTORING GURU - Design Patterns](https://refactoring.guru/design-patterns)μ λμμΈ ν¨ν΄ 22μ’
λ₯λ₯Ό 곡λΆνκ³ , μμ μ½λλ₯Ό μμ±νκ³ , ν λ‘ νκΈ° μν μ€ν°λμ
λλ€.
<br>
## π₯Β μ€ν°λ μΈμ
<table>
<tr>
<td align="center"><a href="https://github.com/minsson"><img src="https://avatars.githubusercontent.com/u/96630194?v=4?s=100" width="175px;" alt=""/><br /><sub><b>λ―Όμ</b></b></sub></a></td>
<td align="center"><a href="https://github.com/derrickkim0109"><img src="https://avatars.githubusercontent.com/u/59466342?v=4?s=100" width="175px;" alt=""/><br /><sub><b>Derrick Kim</b></sub></a></td>
<td align="center"><a href="https://github.com/kiwi1023"><img src="https://avatars.githubusercontent.com/u/101521502?v=4?s=100" width="175px;" alt=""/><br /><sub><b>Kiwi</b></sub></a></td>
<td align="center"><a href="https://github.com/Judy-999"><img src="https://avatars.githubusercontent.com/u/102353787?v=4?s=100" width="175px;" alt=""/><br /><sub><b>Judy</b></sub></a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/unchain123"><img src="https://avatars.githubusercontent.com/u/98506825?v=4?s=100" width="175px;" alt=""/><br /><sub><b>unchain</b><br></a></td>
<td align="center"><a href="https://github.com/Baek-Gom-95"><img src="https://avatars.githubusercontent.com/u/94192712?v=4" width="175px;" alt=""/><br /><sub><b>BaekGom</b><br></a></td>
<td align="center"><a href="https://github.com/wongbingg"><img src="https://avatars.githubusercontent.com/u/95671495?v=4?s=100" width="175px;" alt=""/><br /><sub><b>μ‘λΉ</a></td>
<td align="center"><a href="https://github.com/seohyeon2"><img src="https://avatars.githubusercontent.com/u/50102522?v=4?s=100" width="175px;" alt=""/><br /><sub><b>νμ΄</a></td>
</tr>
</table>
<br />
## π₯Β νμ΅ κ΅μ¬
[REFACTORING GURU - Design Patterns](https://refactoring.guru/design-patterns)μ λμμΈ ν¨ν΄ 22μ’
λ₯
<br>
## π₯ μ€ν°λ μ¬μ΄ν΄
### 0) μ€ν°λ μμ μ (1ν)
- [design-patterns-in-swift](https://github.com/minsson/design-patterns-in-swift) μ μ₯μλ₯ΌΒ `fork`Β ν©λλ€.
### 1) λ§€μ£Ό μμμΌ μ€ν°λ μ΄ν (+첫 μ£Ό)
- λ§€μ£Ό λλ€μΌλ‘ 4μΈ1νμΌλ‘ λ νμ νΈμ±νλ©°, Aνκ³Ό BνμΌλ‘ λλλλ€.
- Aνκ³Ό Bνμ κ°κΈ° λ€λ₯Έ λμμΈ ν¨ν΄μ ν λΉ λ°μ΅λλ€.
### 2) λ€μ μ€ν°λ μκ°κΉμ§
- μμ μ μ‘°μ λ°°μ λ λμμΈ ν¨ν΄μ νμ΅ν©λλ€.
- κ΅μ¬μ κ°λ
κ³Ό μ½λλ₯Ό λ³΄κ³ , νμνλ€λ©΄ λ€λ₯Έ μλ£λ μ°Ύμ보μλ©΄ μ’μ΅λλ€.
- μ΄ μ£Όμ λ₯Ό μ²μ μ νλ μ¬λμκ² μ€λͺ
ν μ μμ μ λλ‘ μ€λΉν©λλ€.
- κ°λ
μ€λͺ
μ νμν μλ£λ₯Ό μ€λΉνλ©΄ μ’μ΅λλ€.
- λ§ν¬λ€μ΄ νμμΌλ‘ μμ±νλ©΄ μ’μ΅λλ€.
- κ΅μ¬, λλ λΈλ‘κ·Έ λ±μ μ°Έκ³ νμ§ μκ³ , μμ λ§μ μμ μ½λλ₯Ό μμ±ν©λλ€.
- κ°λ
μ λ λͺ
νν μ΄ν΄νκ³ , λ€λ₯Έ κ³³μ νμ©νκΈ° μν¨μ
λλ€.
- μμ λ₯Ό μν λ―Έλ μ±μ λ§λ€λ©΄ μ’μ§λ§, μ½μμ±μΌλ‘λ λ체 κ°λ₯ν©λλ€.
- κΉνλΈ μ€ν°λ λ ν¬μ§ν 리, ν΄λΉ μ£Όμ μ ν΄λμ λ€μ΄κ° μμ μ ν΄λλ₯Ό λ§λ€κ³ μ»€λ° κ·μΉμ λ§μΆμ΄ μ»€λ° λ° PR ν©λλ€. PRμ main λΈλμΉλ‘ 보λ
λλ€.
- λ ν¬μ§ν 리μ ν΄λλ λ μ’
λ₯λ‘ μ 리νλ €κ³ ν©λλ€.
- μ£Όμ λ³ ν΄λμ 컀λ°: `1. Singleton`κ³Ό κ°μ μμ μ΄ λ§‘μ μ£Όμ λ³ ν΄λ λ΄μ `Singleton-Minsson` νμμΌλ‘ νλ‘μ νΈλ₯Ό λ§λ€κ³ , μ½λ μμ± ν 컀λ°ν©λλ€. κ°λ
μ€λͺ
μ μν μλ£λ μ΄ νλ‘μ νΈ ν΄λ μμ λ£μ΄μ£Όμλ©΄ λ©λλ€. λμμΈ ν¨ν΄κ³Ό λλ€μ λͺ¨λ μμ΄λ‘ μμ±ν©λλ€. λλ€μμ κ²½μ° νμνλ€λ©΄ μ€λͺ
μ μ¬μ©ν΄λ λ©λλ€.
- κ°μΈλ³ ν΄λμ 컀λ°: μ²μ 컀λ°ν κ²½μ°, κ°μΈλ³ νλ‘μ νΈλ₯Ό `DesignPatterns-Minsson`μ νμμΌλ‘ λ§λλλ€. λλ€μμ μμ μ£Όμ λ³ ν΄λμμ μ¬μ©ν κ²κ³Ό ν΅μΌν©λλ€. λ³ΈμΈμ΄ μ§κΈκΉμ§ μμ±ν κ°λ
κ³Ό μ½λλ₯Ό μ΄ νλ‘μ νΈ ν΄λ λ΄μ 차곑차곑 μμλκ°λλ€.
- μ€ν°λ μ κΉμ§ μ΄ κ³Όμ μ μλ£ ν `PR` 보λ
λλ€. νμνλ€λ©΄ μ€ν°λ μ΄νμλ μμ ν μ μμ΅λλ€.
- μμ λͺ¨λ κ³Όμ μμ μ§λ¬Έμ΄ μλ€λ©΄ λμ€μ½λμ λμμΈ μ€ν°λ λ°©μμ μ§λ¬Έν©λλ€.
### 3) μ€ν°λ (19μ - 20μ 30λΆ)
- κ° νμ λμ€μ½λ μ±λμ λͺ¨μ¬, ν μ£Ό λμ 곡λΆν κ°λ
κ³Ό μ½λλ₯Ό 곡μ νκ³ , ν μνλ μκ°μ κ°μ΅λλ€.
- μ΄ μκ°μ μλ νμ νμμκ² κ°λ
κ³Ό μ½λλ₯Ό μ€λͺ
νκΈ° μ , κ°μ μ£Όμ λ₯Ό 곡λΆν νμλ€μκ² κ²μ¦ λ°λ μκ°μ
λλ€. μ§μμλ΅μ ν΅ν΄ λͺ¨μλλ κ°λ
κ³Ό, μ½λμ μ€λ₯λ₯Ό μμ νλ μκ°μ΄κΈ°λ ν©λλ€.
- λ€λ₯Έ μ£Όμ λ₯Ό 곡λΆνλ μλ νμ νμμκ² 1:1λ‘ μ€λͺ
ν μ μλλ‘ λ€ ν¨κ» λνλ₯Ό λλκ³ , κ°λ
μ μ 리νκ³ , μ€λͺ
μ νμν μλ£λ 보μν©λλ€.
### 4) μ€ν°λ (20μ 30λΆ - 21μ 30λΆ)
- μλνμ λκ΅°κ°μ λλ€ λ§€μΉ λμ΄, λλ§μ λνλ°©μΌλ‘ μ΄λν©λλ€.
- κ°μ 곡λΆν λμμΈν¨ν΄μ κ°λ
λ° μμ μ½λλ₯Ό μμΈν μ€λͺ
ν΄μ€λλ€.
### 5) μ€ν°λ (21μ 30λΆ - 22μ)
- 10λͺ
μ΄ λͺ¨λ λͺ¨μ¬ μ§μμλ΅ λ° ν μ μκ°μ κ°μ΅λλ€.
- λ€μ μ£Όμ 곡λΆν μ£Όμ λ₯Ό μ μ ν©λλ€.
- μ€ν°λ μ§ν λ°©ν₯ κ°μ μ΄ νμν κ²½μ° λ
Όμν©λλ€.
<br>
## π₯Β μ»€λ° κ·μΉ
### 1) Commit Header, Body
- Header: [λμμΈ ν¨ν΄ μ΄λ¦] νμ© μ»¨μ
- Body: μ€λͺ
### 2) μ»€λ° μμ
- **ν°λ―Έλ μ¬μ© μ**
```swift
git commit -m "[Mediator Pattern] 체ν¬λ°μ€μ ν
μ€νΈνλ" -m "μ€λͺ
"
```
- **Fork μ¬μ© μ**

<br>
## π₯Β κ°λ
κΈ°λ‘μ μν κ°μΈλ³ λ§ν¬λ€μ΄ νμΌ μμ±λ²
```swift
# λμμΈ ν¨ν΄ μ΄λ¦
## κ°λ¨ν κ°λ
μ€λͺ
## μμ μ΄ μμ±ν μ½λμ λν μ€λͺ
```
---
## π₯Β μ€ν°λ μΈμ
- λ°λ¦ @derrickkim0109
- ν€μ @kiwi1023
- λ―Όμ @minsson
- μ£Όλ @Judy-999
- μΈμ²΄μΈ @unchain123
- λ°±κ³° @Baek-Gom-95
- μ‘λΉ @wongbingg
- νμ΄ @seohyeon2
### π₯ μ±λ¦°μ§ λμ
## π₯Β κ³΅λΆ μμ
**The Catalog of Design Patterns**μ μλ μ΄ 22κ°μ λμμΈ ν¨ν΄μμ λ§€μ£Ό 곡λΆν μ£Όμ λ₯Ό μ μ ν©λλ€.
## π₯Β μ€ν°λ μ§ν λ°©λ²
- 3~4λͺ
μ© νμ λ°°μ νλ©°, κ°μ μ‘°λ κ°μ λμμΈ ν¨ν΄μ 곡λΆνκ³ , μ 리νλ, μ½λλ κ°μ μμ±ν©λλ€. μμ μ½λλ μ’κ³ , μ§ν μ€μΈ νλ‘μ νΈμ μ μ©ν μ¬λ‘λ μ’μ΅λλ€.
- MarkDown νΉμ ν€λ
ΈνΈλ‘ κ°λ
μ μ 리ν©λλ€. (λ§ν¬λ€μ΄μ κΆμ₯ν©λλ€.)
- μ€μ μ½λλ κ° μ£Όμ λ³ ν΄λμ μμ μ μ΄λ¦μΌλ‘ ν΄λλ₯Ό λ§λ€μ΄ νλ‘μ νΈ νμΌμ μ
λ‘λ ν©λλ€.
- Minsson-DesignPatterns
- μΌμ£ΌμΌμ ν λ² λͺ¨λ λͺ¨μ¬, μλμ κ°λ
λ°ν, μ½λ λ°ν, νμ΄ λ¦¬λ·°λ₯Ό μνν©λλ€.
- κ°λ
λ°ν: μ‘°λ³ κ³Όμ μ²λΌ κ°μ λ§‘μ λΆλΆμ λν΄ λ°ν νΉμ ν λͺ
μ΄ λͺ¨λ λ°ν
- μ½λ λ°ν: κ°μ μμ μ΄ μμ±ν΄μ¨ μ½λλ₯Ό λ°ν (μΈλΉ 20λΆ μ΄λ΄)
- νμ΄ λ¦¬λ·°: μλ‘ λ€λ₯Έ μ‘°μλ λ λͺ
μ΄ λͺ¨μ¬ μλ‘μ μ½λμ λν΄ λ€μ νλ² μ§λ¬Ένκ³ , μ€λͺ
νκ³ , μ΄ν΄νλ μκ°μ κ°μ§ ν, μλκ° κ°λ₯΄μ³μ€ λμμΈ ν¨ν΄μΌλ‘ λΌμ΄λΈ μ½λ©μ μ§νν©λλ€.
---
1) μ‘°λΌλ¦¬ λ§λμ μ€λΉν΄μ¨λ€
- 5λͺ
μ΄ λν λλκ³ , κ°λ
μ 리νκ³ , λ°νμλ£λ₯Ό λ§λ λ€
- μλ‘ μ§μμλ΅μ ν΅ν΄ λͺ¨λ μ΄ν΄ν μ μλλ‘ νλ€
- λ€λ₯Έ μ‘°μκ² μ€λͺ
νκΈ° μ μ½λλ₯Ό κ²μ¦λ°λ μκ°
- 1:1 μ€λͺ
μ΄ κ°λ₯ν΄μ§λ€
-
2) 10λͺ
μ΄ μλ μ리μμ μ½λ 10κ°λ₯Ό λ³Έλ€ -> 1:1 μ€λͺ
μΌλ‘
- κ°μ μ€ν°λλ₯Ό ν΅ν΄ μλλ°© νμ μ½λ μ΅μ 1κ°λ₯Ό λ³Έλ€
- μν κ²½μ° λ ν¬μμ λ³Έλ€
### μ₯¬λ: 3-4λͺ
μ΄ λμ κ² κ°λ€
### 그루νΈ: 1:1λ‘ κ°λ
μ€λͺ
, μ½λλ μΆν 곡μ ν μμ΅
5λͺ
(Aν¨ν΄) - 5λͺ
(Bν¨ν΄)
1:1
1:1
5μ‘° 1μκ° λμ κ°λ
(+μ½λ) μ€λͺ
- μ΄ν΄λ λκΉμ§! -> λΌμ΄λΈμ½λ©
μ΄ 2μκ°
-> νμμ λ ν¬μ μ¬λΌμ¨ μ½λλ₯Ό λ³΄κ³ , κ°μ μμ΅ (μλνμ μ½λ 4κ°κ° μμλ‘..)
μ‘°λ λ§€λ² λ°κΏκ°λ©΄μ νμ
### ν€μ(ν¬λ¦¬μ€ν°λ)
5λͺ
5λͺ
νλ κ±°μ λν΄ λμ (μμκ° λ§μμλ‘ μ΄ν΄νκΈ° μ½λ€)
1) ν° νμμ 5λͺ
μ΄ νλ² λͺ¨μΈλ€ -> λν μ‘°λ³κ³Όμ μ²λΌ μ€λΉ (μλλ°©μ μ΄λ»κ² μ΄ν΄μν¬μ§μ λν μ΄μ . μ μ€λͺ
ν μ μλ μλ£ μ λ...)
2) 10λͺ
μ΄ λͺ¨μμ λ 5λͺ
μ€ λν ν λͺ
μ΄ κ°λ
μ€λͺ
-> μ§λ¬Έ μκ° κ°κΈ° -> μ€λΉν΄μ¨ μ‘°κ° μ무λ λλ΅νλ©΄μ ν λ‘
3) λΌμ΄λΈμ½λ©κΉμ§ μ€ν°λ λ μ§ννλ©΄ μκ° μμκ° λ무 ν¬μ§ μλ? -> μλ£ μ¬λΌμ¨ κ±Έ λ³΄κ³ κ°μΈμ μΌλ‘ μ§λ³΄λ κ² μ’μ보μΈλ€ or λ€μ μ€ν°λκΉμ§ μλλ°©μ΄ μ€λΉν΄μλ κ°λ
μ μ½λλ₯Ό μμ±νκ³ λ ν¬μ μ¬λ¦¬κΈ°
+ 1:1μ΄λ©΄, μ§λ¬Έμ κ³Όμ° μ λλ΅ν μ μμκΉ
+ μ¬λΏμ΄ μμ λ μ¦κ°μ μΌλ‘ νλ¦¬ν° μλ λ΅λ³μ μ 곡ν μ μμκΉ
### νμ΄:γ
γ
5λͺ
μ© 2μ‘°λ‘ λλμ΄ A, Bν¨ν΄ μ€λΉ -> μ΄ 10κ°μ μ½λ AAAAA, BBBBB
1) Aμ‘°λΌλ¦¬ κ°μ μ½λ μ§λ©΄μ κ°λ
μ μ΄ν΄νμΌλ, μ½λλ₯Ό 보면 μ΄λ€ λλμΌλ‘ μ½λλ₯Ό μ§°λμ§ μ΄ν΄ κ°λ₯ (κ° 10λΆμ© μ½λ μ€λͺ
) -> μ΄ 50λΆ
2) μ‘°λΌλ¦¬ 30-40λΆ μ λ κ°μ μ½λμ λν ν λ‘ μ§ν. μ½λ μ΄μ λ±... μ§μμλ΅ μ§ν
3) 1μκ° λ°μ΄ νλ λ€ (μ½λ μ€λͺ
μ€λΉ: λ³ΈμΈμ΄ μ΄ν΄λ₯Ό λͺ»νλλ° μ€λͺ
μ νλ κ² κ°λ₯νκ°.. λ―Όνμλκ°...)
4) 1:1λ‘ κ°λ₯΄μ³μ£ΌκΈ° (μΈλΉ 40λΆ -> μ΄ 80λΆ)
5) 10λͺ
μ΄ λͺ¨μ¬μ ν΄λ‘μ§ λ©νΈ μ λ. (λ³λλ‘ 10λͺ
μ΄ μλ μ리μμ κ°λ
μ 본격μ μΌλ‘ μ€λͺ
νκ±°λ νλ 건 X)
### μ₯¬λ
1) 미리 μ‘°λΌλ¦¬ λ§λμ μ€λΉν΄μ¬μ§ vs μμμ μ€λΉνκ³ ν μ리μμ λ€ μ΄μΌκΈ°λ₯Ό λλλ©° μ€λΉν μ§
λ¨Όμ λ§λμ μ€λΉν΄μ€λ©΄: 5λͺ
λΌλ¦¬ λν λλκ³ , λ°νμλ£λ λ§λ€ μ μλ€ -> 5λͺ
μ΄μ μ€λΉνμ μ λλ©΄ 1:1λ κ°λ₯! κ°μ μ΄ν΄λ₯Ό λ€ μμΌλ¨μΌλκΉ. λ―Όνκ° λ μΌμ μμ΄λ³΄μΈλ€. 1:1λ‘ λ§λ¬μ λ κ°λ
, μ½λ μ€λͺ
νκ³ μ§μμλ΅μ 10λͺ
μ΄μ νλ©΄ μ΄λ¨κΉ?
---
1) μ‘°λΌλ¦¬ λ§λμ μ€λΉν΄μ¨λ€
- 5λͺ
μ΄ λν λλκ³ , κ°λ
μ 리νκ³ , λ°νμλ£λ₯Ό λ§λ λ€
- μλ‘ μ§μμλ΅μ ν΅ν΄ λͺ¨λ μ΄ν΄ν μ μλλ‘ νλ€
- λ€λ₯Έ μ‘°μκ² μ€λͺ
νκΈ° μ μ½λλ₯Ό κ²μ¦λ°λ μκ°
- 1:1 μ€λͺ
μ΄ κ°λ₯ν΄μ§λ€
-
2) 10λͺ
μ΄ μλ μ리μμ μ½λ 10κ°λ₯Ό λ³Έλ€ -> 1:1 μ€λͺ
μΌλ‘
- κ°μ μ€ν°λλ₯Ό ν΅ν΄ μλλ°© νμ μ½λ μ΅μ 1κ°λ₯Ό λ³Έλ€
- μν κ²½μ° λ ν¬μμ λ³Έλ€
7μ - 9μ λ° (5λͺ
μ© λμ³μ μ€λΉ)
9μ λ° - 10μ λ°κΉμ§ 1:1 μ€λͺ
μμΌ : μμμΌ
μκ° : 19μ - 22μ (3μκ°)
νμ : 1ν
λ²κΈ : 5μ²μ? μ΄μ λΆλ¬Έ λΉ μ§λ©΄ 5μ²μ (μ‘°μ¬ μΈμ , μμ°μ¬ν΄μ λ°λ₯Έ μ¬μ μ΄λ©΄ μΈμ )
5μ²μ μ λλ©΄... ? λΌλ§νμ§ μλμ
λ λͺ¨μμ -> νμ....
νμμ μν μ°¨λΉ μ§μ
μ±κΈν€, λΉλλ‘ νλ€
λ―Όμμ΄ μ‘° μ ν΄μ 곡μ§νλ€
Minsson-DesignPatterns
νλμ νλ‘μ νΈ νμΌ
1.
2.
3.
4.
3) νλνμ΅μ²λΌ κ³ μ λ μκ°μ μ νλ€
- μ μ¬ μ , μ μ¬ ν
- νμΌ μ λ
7μ μ΄ν
-
---
## π₯Β μ€ν°λ μΈμ
<table>
<tr>
<td align="center"><a href="https://github.com/minsson"><img src="https://avatars.githubusercontent.com/u/96630194?v=4?s=100" width="140px;" alt=""/><br /><sub><b>λ―Όμ</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/0" /></sub></a><br /></td>
<td align="center"><a href="https://github.com/derrickkim0109"><img src="https://avatars.githubusercontent.com/u/59466342?v=4?s=100" width="140px;" alt=""/><br /><sub><b>Derrick Kim</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/0" /></sub></a><br /></td>
<td align="center"><a href="https://github.com/kiwi1023"><img src="https://avatars.githubusercontent.com/u/101521502?v=4?s=100" width="140px;" alt=""/><br /><sub><b>Kiwi</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/30" /></sub></a><br /></td>
<td align="center"><a href="https://github.com/Judy-999"><img src="https://avatars.githubusercontent.com/u/102353787?v=4?s=100" width="140px;" alt=""/><br /><sub><b>Judy</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/55" /></sub></a><br /></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/unchain123"><img src="https://avatars.githubusercontent.com/u/98506825?v=4?s=100" width="140px;" alt=""/><br /><sub><b>unchain</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/30" /></sub></a><br /></td>
<td align="center"><a href="https://github.com/Baek-Gom-95"><img src="https://avatars.githubusercontent.com/u/94192712?v=4" width="140px;" alt=""/><br /><sub><b>BaekGom</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/27" /></sub></a><br /></td>
<td align="center"><a href="https://github.com/wongbingg"><img src="https://avatars.githubusercontent.com/u/95671495?v=4?s=100" width="140px;" alt=""/><br /><sub><b>μ‘λΉ</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/48" /></sub></a><br /></td>
<td align="center"><a href="https://github.com/seohyeon2"><img src="https://avatars.githubusercontent.com/u/50102522?v=4?s=100" width="140px;" alt=""/><br /><sub><b>νμ΄</b><br><img src="https://us-central1-progress-markdown.cloudfunctions.net/progress/37" /></sub></a><br /></td>
</tr>
</table>
<br />