---
# System prepended metadata

title: "\U0001F3A8 디자인 패턴 스터디"

---

# 🎨 디자인 패턴 스터디

<br>

![](https://i.imgur.com/TJjXipW.png)

<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 사용 시**

![](https://i.imgur.com/y0yITdE.png)

<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 />
        
