๐ค ํ์ํ ์ด์ ?
๊ทธ ๋์ ์ฌ๋ฌ ์์คํ ์ํคํ ์ฒ๊ฐ ์กด์ฌํด์์ต๋๋ค.
์ด๋ฐ ์ฌ๋ฌํ ์ํคํ ์ฒ๋ค์ ์ธ๋ถ์ฌํญ๋ค์ ๋ค๋ฅด์ง๋ง ๋์ผํ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ ๊ทธ๊ฒ์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ผ๋ ๋ชฉํ์ ๋๋ค. ํด๋น ์ํคํ ์ฒ๋ค์ ์ํํธ์จ์ด๋ฅผ ์ฌ๋ฌ ๋ ์ด์ด(layer)๋ก ๋๋์ด ๋ชฉํ๋ฅผ ๋ฌ์ฑํฉ๋๋ค.
๋ ์ด์ด ์ข ๋ฅ์๋ ๋น์ฆ๋์ค ๊ท์น ๋ ์ด์ด๊ฐ ํ๋์ด์ ์กด์ฌํ๊ณ ์ธํฐํ์ด์ค์ฉ ๋ ์ด์ด๊ฐ ์กด์ฌํฉ๋๋ค.
๊ฐ๊ฐ์ ์ํคํ ์ฒ๋ค์ ์์ฐ์ฑ
- ํ๋ ์์ํฌ์ ๋
๋ฆฝ์ ์
๋๋ค.
- ์ํคํ ์ฒ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์กด์ฌ ์ฌ๋ถ์ ์์กดํ์ง ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์คํ ์ ์ ํ๋ ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ๋๋ ๋์ ์ด๋ฌํ ํ๋ ์์ํฌ๋ฅผ ๋๊ตฌ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ
์คํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋น์ฆ๋์ค ๊ท์น์ UI, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์น ์๋ฒ ๋๋ ๊ธฐํ ์ธ๋ถ ์์ ์์ด ํ ์คํธํ ์ ์์ต๋๋ค.
- UI์ ๋
๋ฆฝ์ ์
๋๋ค.
- ์์คํ ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ UI๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋น์ฆ๋์ค ๊ท์น์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์น UI๋ฅผ ์ฝ์ UI๋ก ๊ต์ฒดํ ์ ์์ต๋๋ค.
- **DB(๋ฐ์ดํฐ๋ฒ ์ด์ค)**์ ๋
๋ฆฝ์ ์
๋๋ค.
- Mongo, BigTable, CouchDB ๋ฑ์ ์ํด Oracle ๋๋ SQL Server๋ฅผ ๊ต์ฒดํ ์ ์์ต๋๋ค. ์ํํธ์จ์ด์ ๋น์ฆ๋์ค ๊ท์น์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ธ๋ฉ๋์ง ์์ต๋๋ค.
- ์ธ๋ถ ์์๋ก๋ถํฐ ๋
๋ฆฝ์ ์
๋๋ค.
- ์ํํธ์จ์ด์ ๋น์ฆ๋์ค๊ท์น์ ์ธ๋ถ ์์์ ๋ถ๋ฆฌ๋ฉ๋๋ค.
Dependency Rule (์์กด์ฑ ๊ท์น)
<์ด๋ฏธ์ง ์ถ์ฒ: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html>
ํด๋น ์ด๋ฏธ์ง๋ ์ํํธ์จ์ด์ ๋ค์ํ ์์ญ์ ํ์ํ ์ด๋ฏธ์ง์ ๋๋ค.
- ๋ฐ๊นฅ์ชฝ์์์ ๋ด๋ถ๋ก ๊ฐ์๋ก ์ํํธ์จ์ด ์์ค์ด ๋ฎ์ ์์ค์์ ๋์์ง๋๋ค.
- ์์กด์ฑ ๊ท์น์ ๋ด๋ถ๋ง ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค. ๋ด๋ถ ์ ๊ณ์ธต์์ ์ธ๋ถ ์ ๊ณ์ธต์ ๋ฌด์์ด ์๋์ง ์ ์ ์์ต๋๋ค. ์ฆ, ์ธ๋ถ ์ ๊ณ์ธต์์ ๋ด๋ถ ์ ๊ณ์ธต์ ์์กด์ฑ์ ๊ฐ์ง๋ฉด ์๋ฉ๋๋ค.
- SOLID ์์น
Entities - (์ด๋ฏธ์ง ์ค ๋ ธ๋ฝ์ ๊ณ์ธต ์ฐธ๊ณ )
Entities์๋ ๋ชจ๋ ๋น์ฆ๋์ค ๊ท์น์ ์บก์ํํฉ๋๋ค. ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ฐ์ฒด์ผ ์ ์๊ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ํจ์์ ์งํฉ์ฒด์ผ ์ ์์ต๋๋ค.
ํด๋น ๊ณ์ธต์ ์ธ๋ถ์ ์ธ ๊ฒ์ด ๋ฐ๋ ๋ ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ์ ์ ๊ณ์ธต์ ๋๋ค.
Use Cases - (์ด๋ฏธ์ง ์ค ๋นจ๊ฐ์ ๊ณ์ธต ์ฐธ๊ณ )
Use Cases์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ณ๋ก ๋น์ฆ๋์ค ๊ท์น์ด ํฌํจ๋์ด ์์ต๋๋ค. Entities๊ณ์ธต๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ ํ๋ฆ์ ์กฐ์ ํ๋ ๊ณ์ธต์ ๋๋ค.
Use Cases ๊ณ์ธต์ ๋ณ๊ฒฝ์ฌํญ์ด entities๊ณ์ธต์ ์ํฅ์ ๋ฏธ์น๋ฉด ์๋๊ณ , DB, UI, Common Framework์ ์ํฅ์ ๋ฐ์ผ๋ฉด ์๋ฉ๋๋ค.
Interface Adapters - (์ด๋ฏธ์ง ์ค ์ด๋ก์ ๊ณ์ธต ์ฐธ๊ณ )
Interface Adapters ๊ณ์ธต์ use cases, entities๊ณ์ธต์ ๊ฐ์ฅ ํธ๋ฆฌํ ํ์์์ DB, Web๊ณผ ๊ฐ์ ์ธ๋ถ์์์ ํธ๋ฆฌํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๊ณ์ธต์ ๋๋ค.
Frameworks and Drivers - (์ด๋ฏธ์ง ์ค ํ๋์ ๊ณ์ธต ์ฐธ๊ณ )
๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ ๊ณ์ธต์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก, DB, Web Framework ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฃผ์์
๐จ ์ฃผ์ : ๊ผญ 4๊ฐ์ ๋ ์ด์ด ๋๋ ์ด์์ผ๋ก ๋ง์ถฐ์ผ ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ํ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ ์ด์ด์ ๋ถ๋ฆฌ๋ฅผ ํ๋ฉด ๋ฉ๋๋ค. ํ์ง๋ง, ์์กด์ฑ ๊ท์น๋ค์ ์ ์ฉํด์ผ ํฉ๋๋ค.
๐งน iOS Clean Architecture์ด๋?
iOS์ฑ์ ํน์ ์ญํ ์ ๊ฐ์ง๋ ๋ ์ด์ด(layer)๋ก ๋ถ๋ฆฌํ๋ ์ํคํ ์ฒํจํด์ ๋๋ค.
ํด๋ฆฐ์ํคํ ์ฒ๋ฅผ ๋์ ํ๋ฉด ํ๋ก์ ํธ์ ๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ๊ฑฐ๋ ํน์ ๋ ์ด์ด์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
<์ด๋ฏธ์ง ์ถ์ฒ : https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3>
๐ฑ Presentation Layer
Presentation Layer๋ UI , Presenter , ViewModel ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ํ, Domain Layer์ ์ข ์๋์ด ์์ต๋๋ค.
๐ Domain Layer (Business Logic)
Domain Layer๋ Use case/Interactor , Entity , Repository Interface๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Domain Layer๋ ๋ ๋ฆฝ์ ์ธ Layer์ ๋๋ค.
๋ค๋ฅธ ํ๋ก์ ํธ๋ด์์ ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๐ฟ Data Layer (Data Repositories)
Data Layer๋ Repository Implementation , DataSource ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Data Layer๋ data source์์ ์๊ฒฉ(remote) ๋๋ ๋ก์ปฌ(local)๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
Domain Layer์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
MVVM with Clean Architecture
<์ด๋ฏธ์ง ์ถ์ฒ : https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3>
์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด, Data Layer์ Presentation Layer๋ ๋ชจ๋ Domain Layer์ ์ข ์๋์ด ์์ต๋๋ค. Data Leyer์์ Domain Layer์ ์ข ์๋๊ธฐ ์ํด ์์กด์ฑ์ญ์ ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ Repository Interface๋ฅผ ๊ตฌํํ ํ Data Layer์์ Repository๋ฅผ ๊ตฌํํฉ๋๋ค.
Presentation Layer์์ MVVMํจํด์ ํ์ฉํฉ๋๋ค.
๋ง์น๋ฉฐ
์ ์ฉํด๋ณด๊ณ ๋๋์ ์ ์์ ๊ธ์์ ๋งํ๋ ์ฅ์ ๋ค์ ์ง์ ๋๋ผ๊ฒ ๋๋ ๊ฒ ๊ฐ๋ค.
- ์ค์ ์ฌ์ฉ์ฌ๋ก์์ ๋๋์
- DTO๋ฅผ ์์ฑํ ๋, quicktype.io๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ค์ ํ์ํ ํค๊ฐ๋ง ์ ๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์์ด ๊ทธ๋๋ก ๊ฐ์ ธ์จ ํ Domain Layer์์ Entities๋ฅผ ํ์ํ ํค๊ฐ๋ง ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ๋ด์์ 2๊ฐ์ง(DTO, Entities)๋ฅผ ๋น๊ตํด๊ฐ ์ ์๋ ์ฅ์ ์ด ์๋ ๊ฒ ๊ฐ๋ค.
- UnitTest๋ฅผ ์์ฑํ ๋, ViewModel๋ง์ ํ ์คํธํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํ ์คํธ์ฝ๋ ์์ฑ์ด ์์ํ ๊ฒ ๊ฐ๋ค.
- View์ ๋ณ๊ฒฝ์ด ์์ ๋ก์ด ๊ฒ ๊ฐ๋ค. (UIKit๊ณผ SwiftUI์ ์ด๋์ด ์์ํ๋ค.)
- ์๋์ผ๋ก ๋ชจ๋ํ๊ฐ ๋๊ณ ์ถํ ํ๋ ์์ํฌ๋ก ๋ถ๋ฆฌํ๋ค๋ฉด ๋์ฑ ํธ๋ฆฌํ ๊ฒ ๊ฐ๋ค.
- ํ์ผ์ ๊ฐฏ์๊ฐ ๋ง์ ๊ฐ๋ฐ ์๋๊ฐ ๋ ์ค๋๊ฑธ๋ฆฌ๋ ๋จ์ ์ด ์์ง๋ง, Xcode ํ ํ๋ฆฟ์ ํ์ฉํ๋ฉด ๋ณด์์ด ๋ ๊ฒ ๊ฐ๋ค.
- ์ํ๋ ํ์ผ ๋ฐ ์ํ๋ ๋ถ๋ถ๋ฑ์ ์ฐพ๊ธฐ ์ฌ์ ์์ (์ด์ ์์ , ๊ธฐ๋ฅ์ถ๊ฐ, ์ฝ๋๋ฆฌ๋ทฐ)๋ฑ์ด ํธ๋ฆฌํ ๊ฒ ๊ฐ๋ค.
์๋ ์ฐธ๊ณ ๋งํฌ์ CleanCode ๋ฌธ์๋ ๊ด๋ฒ์ํ ์ํํธ์จ์ด์ CleanArchitecture๋ฅผ ์ค๋ช ํ๊ณ ๋๋จธ์ง ๋งํฌ๋ค์ ์ฐธ๊ณ ํ์ฌ iOS์ฑ์์ CleanArchitecture๋ฅผ ์์ธํ ์ค๋ช ํ ๊ธ๋ค์ ์ฐธ๊ณ ํ๊ธฐ ์ข์ต๋๋ค.
๐ ์ฐธ๊ณ ๋งํฌ
- CleanCode ๋ฌธ์
- What is iOS clean architecture? - Medium
- MVVM with Clean Architecture Template- https://github.com/kudoleh/iOS-Clean-Architecture-MVVM
'iOS > Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] Coordinator Pattern (0) | 2024.05.22 |
---|