-
Notifications
You must be signed in to change notification settings - Fork 0
Clean Architecture
ํด๋ฆฐ ์ํคํ ์ฒ์ ๋ํ ์ ์ฒด์ ์ธ ๊ฐ๋
- ๋งํด์ด ๊ณ ์ํด ๋ธ ์ํคํ ์ฒ ๊ฐ๋
- ์ด์ง๋ง, ์ฌ์ค ๋ชจ๋ ์ํํธ์จ์ด๊ฐ ์ด๋ฌํ ๋น์ทํ ๊ฐ๋ ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์๋ค. ๊ทธ๊ฒ์ ์ํด ๋ฐฅ, ์๋ ๋ก๋ฒํธ C.๋งํด์ด ์ ๋ฆฌํ ๊ฒ.
- ํ๋ ์์ํฌ์ ๋ ๋ฆฝ์ฑ
- ์ํคํ ์ฒ๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์กด์ฌ์ ์์กดํ์ง ์๋๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ
- UI, ๋ฐ์ดํฐ๋ฒ ์ด์ค, API ํธ์ถ, ๋๋ ์ธ๋ถ ์์ ์์ด ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
- UI ๋ ๋ฆฝ์ฑ
- UI๊ฐ ์์ ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ถ๋ถ์ ๊ฑด๋ค์ด์ง ์๊ณ ์ฝ๊ฒ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
- ์ฆ, UI์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๋ฆฝ๋์ด ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฆฝ์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋น์ฆ๋์ค ๋ก์ง์๋ ์ํฅ์ ๋ฏธ์น ์๋๋ค.
- ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๋ฆฝ๋์ด ์๋ค.
- ๋ชจ๋ ์ธ๋ถ ์์์ ๋ํ ๋ ๋ฆฝ์ฑ
- ๋น์ฆ๋์ค ๋ก์ง์ ์ธ๋ถ ์ธ๊ณ์์ ์ธํฐํ์ด์ค์ ๋ํด ์ ํ ์์ง ๋ชปํ๋ค.
- ๋์ฌ์ ์์ชฝ์ผ๋ก ๋ค์ด๊ฐ์๋ก ๊ณ ์์ค์ ์ํํธ์จ์ด๊ฐ ๋๋ค.
- ๋ฐ๊นฅ์ชฝ ์์ ๋งค์ปค๋์ฆ์ด๊ณ ์์ชฝ ์์ ์ ์ฑ ์ด๋ค.
- ๊ณ ์์ค๊ณผ ์ ์์ค์ ์๋ฏธ๋ ์๋์ ๊ฐ๋ค.
- ๊ณ ์์ค : ์ถ์ํ๋ ๊ฐ๋ , ์์ ์์ค, ์ ์ฑ
- ์์ : ๊ธ์ ์์ฑํ๋ค. ์ผ๊ธฐ๋ฅผ ์ ์ฅํ๋ค.
- ์ ์์ค : ์ธ๋ถ์ ์ธ ๊ฐ๋ , ๋งค์ปค๋์ฆ, ๊ณ ์์ค์ ๊ตฌํํ๊ธฐ ์ํ ์ธ์ธํ ๊ฐ๋
- ์์ : SQLite3์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ์์ค์ฝ๋์ ์์กด์ฑ์ ๋ฐ๋์ ์์ชฝ์ผ๋ก, ๊ณ ์์ค์ ์ ์ฑ ์ ํฅํด์ผ ํ๋ค.
- ๋ด๋ถ์ ์์ ๋ฐ๊นฅ ์์ ๋ฐ์ดํฐ ํ์๋ ์ฌ์ฉํด์๋ ์๋๋ค. ์ฆ, ์ธ๋ถ๊ฐ ๋ด๋ถ์ ์ํฅ์ ๋ฏธ์ณ์๋ ์ ๋๋ก ์๋๋ค.
- ์ด๋ DTO๋ผ๋ ๊ฐ๋ ์ผ๋ก ์ด์ด์ง ์ ์๋๋ฐ, ๋์ค์ ๋ค๋ฃจ์. (DTO๋ฅผ ํตํด ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ถ์์ ์ธ ์ ์๋๋ก ์ ํํ๋ค.)
-
๋น์ฆ๋์ค ๋ก์ง์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํ์
-
๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ๋๊ฑฐ๋ ์ผ๋ จ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ํจ์์ ์งํฉ์ด ๋ ์ ์๋ค.
-
iQA ํ๋ก์ ํธ์์๋ Domain Layer์์ ์ ์ผํ๊ฒ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ก ์ ์ํ๋ค.
-
Presentation Layer๋ Data Layer์์ ์ํฐํฐ ์ฌ์ฉ์ ๊ฐ๋ฅํ์ง๋ง, Domain Layer์์๋ ์ ์ผํ๊ฒ ์ํฐํฐ๋ง ์ ์ํด์ผํ๋ค.
-
์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ๋ ์ ๋ฌด ๊ท์น์ ์์ฑ
-
์์คํ ์ ๋ชจ๋ ๋น์ฆ๋์ค๋ก์ง์ ์บก์ํํ๊ณ ๊ตฌํํ๋ค.
-
UI, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ค๋ฅธ ํ๋ ์์ํฌ์ ๊ฐ์ ์ธ๋ถ ์์์์ ๋ฐ์ํ ๋ณ๊ฒฝ์ด ์ด ๊ณ์ธต์ ์ํฅ์ ์ฃผ๋ฉด ์๋๋ค. (์์ ๊ฒฉ๋ฆฌ)
-
ํ์ง๋ง ์๋น์ค๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๋ค.
-
iQA ํ๋ก์ ํธ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์กฐ๊ธ ๋ ๋ณต์กํ๊ฒ ๋ง๋ค๊ธฐ ์ํ์ฌ SQL๋ฌธ์ผ๋ก ๊ฐ๋ฐ ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ค์ ์ ์ฆ์ผ์ด์ค์ ๋ด์๋ค. (์ ๋ ฌ ๊ธฐ๋ฅ, find ๊ธฐ๋ฅ)
-
Data Layer์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ์ด ํ์ํ๋ฏ๋ก Repository๋ฅผ ์์ ํ๊ณ ์์ง๋ง, ์ด๋ ํ๋กํ ์ฝ์ด๋ฏ๋ก ๊ตฌ์ฑ์ด ์ด๋ป๊ฒ ๋์ด ์๋ ์ง๋ ๋ชจ๋ฅธ๋ค. (DIP์์น)
-
Gateways, Controllers, Presenters๊ฐ ์ํด ์๋ Layer
-
UseCases์์ ๊ฐ์ฅ ํธ๋ฆฌํ ๋ฐ์ดํฐ ํ์ ์์ DB, UI ๋ฑ๊ณผ ๊ฐ์ ์ธ๋ถ ํ๋ ์์ํฌ์ ๊ฐ์ฅ ํธ๋ฆฌํ format์ผ๋ก ๋ณํํ๋ ๊ณณ์ด๋ค.
-
iQA ํ๋ก์ ํธ์์๋ Repositoryํด๋์ ViewModel์ด๋ค.
-
Repository๋ ๊ฐ์ฅ ๋ฐ๊นฅ ์ชฝ ์์ธ
SQLiteDatasource์ UseCase์ ์ด์ด์ฃผ๋ฉฐ format์ ๋ณํํด์ฃผ๋ layer์ด๋ค. -
ViewModel์ VC์ UseCase๋ฅผ ์ด์ด์ฃผ๋ ์ด๋ํฐ๋ก, UseCase์ foramt์ View์์ ์ฌ์ฉ๋๋ format์ผ๋ก ๋ณํํด์ค๋ค.
- ๊ฐ์ฅ ๋ฐ๊นฅ ์ชฝ ๋ ์ด์ด์ด๋ค.
- ์ฆ, DB๋ UI ๋ฑ๊ณผ ๊ฐ์ ํ๋ ์์ํฌ์ ๋๊ตฌ๋ก ๊ตฌ์ฑ๋๋ค.
- UseCase๊ฐ Repository๋ฅผ ํธ์ถํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
- ์ง์ ํธ์ถํ๊ฒ ๋ ๊ฒฝ์ฐ ์์กด ๊ท์น์ ์๋ฐฐํ๊ธฐ ๋๋ฌธ์
- UseCase๊ฐ ๋ด๋ถ ์์ ์ธํฐํ์ด์ค๋ฅผ ํธ์ถํ๋๋ก ํ๊ณ , ์ธ๋ถ ์์ Repository๊ฐ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ๋ง๋ ๋ค. (DIP ์์น)