iOS Developer Lab

Architecture &
Design Patterns

๋™์ผํ•œ Task Manager ์•ฑ์„ 6๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜๋กœ ๊ตฌํ˜„ํ•˜๊ณ , 12๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ด์„ ์ง์ ‘ ์ฒดํ—˜ํ•˜๋Š” ์ข…ํ•ฉ ํ•™์Šต ํ”„๋กœ์ ํŠธ. ๋ชจ๋“  ๋ชจ๋“ˆ์€ Start โ†’ Finish ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

6
Architectures
12
Design Patterns
38
Swift Files
MVC
๊ธฐ์ดˆ
โ†’
MVP
๋ถ„๋ฆฌ ์‹œ์ž‘
โ†’
MVVM
๋ฐ˜์‘ํ˜•
โ†’
MVVM+C
๋„ค๋น„๊ฒŒ์ด์…˜ ๋ถ„๋ฆฌ
โ†’
Clean
๋ ˆ์ด์–ด ๋ถ„๋ฆฌ
โ†’
Redux
๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„
01 โ€” ARCHITECTURES

6๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜

๊ฐ™์€ ๊ธฐ๋Šฅ, ๋‹ค๋ฅธ ๊ตฌ์กฐ. ๊ฐ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ์ง์ ‘ ๋น„๊ตํ•˜์„ธ์š”.

01
MVC
Model โ€” View โ€” Controller
Apple์˜ ๊ธฐ๋ณธ ํŒจํ„ด. ๊ฐ€์žฅ ์ง๊ด€์ ์ด์ง€๋งŒ Controller๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๋Š” "Massive VC" ๋ฌธ์ œ๋ฅผ ์ฒด๊ฐํ•˜์„ธ์š”.
Model โ†โ†’ Controller โ†โ†’ View โš ๏ธ Controller๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์†Œ์œ 
Singleton Delegate
Start โ€” TODO ๋ผˆ๋Œ€Finish โ€” ์™„์„ฑ๋ณธ
์ฝ”๋“œ & ์„ค๋ช… ๋ณด๊ธฐ โ†’
02
MVP
Model โ€” View โ€” Presenter
View๋ฅผ "๋ฉ์ฒญํ•˜๊ฒŒ" ๋งŒ๋“ค๊ณ , Presenter๊ฐ€ ๋ชจ๋“  ๋กœ์ง ๋‹ด๋‹น. Protocol๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ Mock ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ.
View โ†protocolโ†’ Presenter โ†’ Model View๋Š” Passive (์‹œํ‚ค๋Š” ๋Œ€๋กœ๋งŒ)
Observer Strategy
StartFinish
์ฝ”๋“œ & ์„ค๋ช… ๋ณด๊ธฐ โ†’
03
MVVM
Model โ€” View โ€” ViewModel
Combine์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ. SwiftUI์™€ ๊ถํ•ฉ ์ตœ๊ณ . Command ํŒจํ„ด์œผ๋กœ Undo ๊ธฐ๋Šฅ๊นŒ์ง€.
View โ†@Publishedโ†’ ViewModel โ†’ Model Combine ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌ
Factory Method Command
StartFinish
์ฝ”๋“œ & ์„ค๋ช… ๋ณด๊ธฐ โ†’
04
MVVM + C
MVVM + Coordinator
ํ™”๋ฉด ์ „ํ™˜ ๋กœ์ง์„ Coordinator๊ฐ€ ์ „๋‹ด. ViewModel์€ ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ์ฒ˜๋ฆฌ.
Coordinator โ†’ ViewModel โ†’ Model โ†“ navigation View (ํ™”๋ฉด ์ „ํ™˜์€ Coordinator๊ฐ€)
Coordinator Builder
StartFinish
์ฝ”๋“œ & ์„ค๋ช… ๋ณด๊ธฐ โ†’
05
Clean
Clean Architecture
Domain์ด ๊ฐ€์žฅ ์•ˆ์ชฝ. UseCase์— ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ์ง‘์ค‘. Protocol๋กœ Data์™€ ์™„์ „ ๋ถ„๋ฆฌ.
Presentation โ†’ Domain โ† Data Domain์€ ์•„๋ฌด๊ฒƒ๋„ importํ•˜์ง€ ์•Š์Œ = ์ˆœ์ˆ˜ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
Repository Adapter Facade
StartFinish
์ฝ”๋“œ & ์„ค๋ช… ๋ณด๊ธฐ โ†’
06
Redux
Redux / TCA-like
๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„. State๋Š” ํ•˜๋‚˜, Action์œผ๋กœ๋งŒ ๋ณ€๊ฒฝ, Reducer๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜. ํ…Œ์ŠคํŠธ ์ตœ๊ฐ•.
View โ†’ Action โ†’ Reducer โ†’ State โ†’ View โ†“ Effect (๋น„๋™๊ธฐ)
State Reducer Middleware
StartFinish
์ฝ”๋“œ & ์„ค๋ช… ๋ณด๊ธฐ โ†’
02 โ€” DESIGN PATTERNS

12๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ด

์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„ โ€” ์„ธ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ํ•ต์‹ฌ ํŒจํ„ด์„ iOS ์‹ค๋ฌด ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—๏ธ
Creational
๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€
Singleton
์ธ์Šคํ„ด์Šค๊ฐ€ ๋”ฑ ํ•˜๋‚˜
Factory Method
์ƒ์„ฑ ๋กœ์ง ๋ถ„๋ฆฌ
Abstract Factory
๊ด€๋ จ ๊ฐ์ฒด ๋ฌถ์Œ ์ƒ์„ฑ
Builder
๋‹จ๊ณ„๋ณ„ ๊ฐ์ฒด ๊ตฌ์„ฑ
๐Ÿงฉ
Structural
๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐํ•ฉํ•  ๊ฒƒ์ธ๊ฐ€
Adapter
DTO โ†’ Entity ๋ณ€ํ™˜
Decorator
๊ธฐ๋Šฅ ๋ง์”Œ์šฐ๊ธฐ
Facade
๋ณต์žกํ•จ์„ ๋‹จ์ˆœํ•˜๊ฒŒ
Composite
ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ผ๊ด€ ์ฒ˜๋ฆฌ
โšก
Behavioral
๊ฐ์ฒด ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ
Observer
Combine, @Published
Strategy
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ต์ฒด
Command
Undo / Redo
State
์ƒํƒœ๋ณ„ ํ–‰๋™ ๋ณ€๊ฒฝ
03 โ€” LEARNING ROADMAP

ํ•™์Šต ๋กœ๋“œ๋งต

3์ฃผ ์ปค๋ฆฌํ˜๋Ÿผ. Start๋ฅผ ๋จผ์ € ๋„์ „ํ•˜๊ณ , ๋ง‰ํžˆ๋ฉด Finish๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Phase 1 โ€” Week 1
๊ธฐ์ดˆ: MVC์—์„œ ์‹œ์ž‘ํ•˜๊ธฐ
101-MVC/Start ์™„์„ฑ
2Creational ํŒจํ„ด ํ•™์Šต
302-MVP/Start ์™„์„ฑ
4MVC vs MVP ๋น„๊ต ๋ถ„์„
Phase 2 โ€” Week 2
์ค‘๊ธ‰: ๋ฐ˜์‘ํ˜•๊ณผ ํ™”๋ฉด ์ „ํ™˜
5Behavioral ํŒจํ„ด ํ•™์Šต
603-MVVM/Start ์™„์„ฑ
704-MVVM-Coordinator ์™„์„ฑ
8Command Undo ๊ตฌํ˜„ ์ฒดํ—˜
Phase 3 โ€” Week 3
๊ณ ๊ธ‰: ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ์™€ ๋‹จ๋ฐฉํ–ฅ
9Structural ํŒจํ„ด ํ•™์Šต
1005-CleanArchitecture ์™„์„ฑ
1106-Redux/Store ์™„์„ฑ
12Reducer ์ˆœ์ˆ˜ํ•จ์ˆ˜ ํ…Œ์ŠคํŠธ
Phase 4 โ€” Mastery
๋น„๊ต ๋ถ„์„ & ์ž๊ธฐ ํ”„๋กœ์ ํŠธ ์ ์šฉ
136๊ฐ€์ง€ ์ฝ”๋“œ ํšก๋‹จ ๋น„๊ต
14์žฅ๋‹จ์  ์ •๋ฆฌ ๋ฌธ์„œ ์ž‘์„ฑ
15์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ
04 โ€” PROJECT STRUCTURE

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

iOSArchLab/ โ”œโ”€โ”€ Shared/ โ”‚ โ””โ”€โ”€ TaskItem.swift โ† ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ โ”‚ โ”œโ”€โ”€ 01-MVC/ โ”‚ โ”œโ”€โ”€ GUIDE.md โ† ํ•™์Šต ๊ฐ€์ด๋“œ โ”‚ โ”œโ”€โ”€ Start/ TODO ๋ผˆ๋Œ€ โ”‚ โ”‚ โ”œโ”€โ”€ TaskStorage.swift Singleton โ”‚ โ”‚ โ””โ”€โ”€ TaskListViewController.swift โ”‚ โ””โ”€โ”€ Finish/ ์™„์„ฑ๋ณธ โ”‚ โ”œโ”€โ”€ TaskStorage.swift โ”‚ โ””โ”€โ”€ TaskListViewController.swift โ”‚ โ”œโ”€โ”€ 02-MVP/ โ”‚ โ”œโ”€โ”€ GUIDE.md โ”‚ โ”œโ”€โ”€ Start/ Observer, Strategy โ”‚ โ””โ”€โ”€ Finish/ โ”‚ โ”œโ”€โ”€ 03-MVVM/ โ”‚ โ”œโ”€โ”€ GUIDE.md โ”‚ โ”œโ”€โ”€ Start/ Factory, Command (Undo) โ”‚ โ””โ”€โ”€ Finish/ โ”‚ โ”œโ”€โ”€ 04-MVVM-Coordinator/ โ”‚ โ”œโ”€โ”€ GUIDE.md โ”‚ โ”œโ”€โ”€ Start/ Coordinator, Builder โ”‚ โ””โ”€โ”€ Finish/ โ”‚ โ”œโ”€โ”€ 05-CleanArchitecture/ โ”‚ โ”œโ”€โ”€ GUIDE.md โ”‚ โ”œโ”€โ”€ Start/Domain/ Repository, Adapter, Facade โ”‚ โ””โ”€โ”€ Finish/{Domain,Data}/ โ”‚ โ”œโ”€โ”€ 06-Redux/ โ”‚ โ”œโ”€โ”€ GUIDE.md โ”‚ โ”œโ”€โ”€ Start/ State, Reducer, Effect โ”‚ โ””โ”€โ”€ Finish/ โ”‚ โ””โ”€โ”€ DesignPatterns/ โ”œโ”€โ”€ Creational/ Singleton, Factory, AbstractFactory, Builder โ”œโ”€โ”€ Structural/ Adapter, Decorator, Facade, Composite โ””โ”€โ”€ Behavioral/ Observer, Strategy, Command, State
05 โ€” COMPARISON

์•„ํ‚คํ…์ฒ˜ ๋น„๊ตํ‘œ

Architecture ๋‚œ์ด๋„ ํ•ต์‹ฌ ๋ฐฐ์›€ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ์ ํ•ฉํ•œ ๊ทœ๋ชจ
MVC
Apple ๊ธฐ๋ณธ, Massive VC ์ฒด๊ฐ โญ ํ”„๋กœํ† ํƒ€์ž…, ์†Œ๊ทœ๋ชจ
MVP
Passive View, Protocol ๋ถ„๋ฆฌ โญโญโญ ์ค‘์†Œ๊ทœ๋ชจ
MVVM
Combine ๋ฐ”์ธ๋”ฉ, ๋ฐ˜์‘ํ˜• โญโญโญ ์ค‘๊ทœ๋ชจ, SwiftUI ํ”„๋กœ์ ํŠธ
MVVM+C
ํ™”๋ฉด ์ „ํ™˜ ๋ถ„๋ฆฌ, ๋”ฅ๋งํฌ โญโญโญโญ ์ค‘๋Œ€๊ทœ๋ชจ, ๋ณต์žกํ•œ ๋„ค๋น„๊ฒŒ์ด์…˜
Clean
๋ ˆ์ด์–ด ๋ถ„๋ฆฌ, DIP, UseCase โญโญโญโญโญ ๋Œ€๊ทœ๋ชจ, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ
Redux
๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„, ์ˆœ์ˆ˜ ํ•จ์ˆ˜ โญโญโญโญโญ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ