- Published on
๐ Swift - Domain ๋ ์ด์ด์ ํ์์ฑ
- Authors
- Name
- ์ด์ฐฝ์ค
- ๋ฐฐ๊ฒฝ
- ๊ณผ์
- Coordinator
- ๊ทธ๋ ๋ค๋ฉด ๋ฐฉ๋ฒ์..?
- Domain Layer
- UseCase
- MusicSpot ์์๋?
- ๊ฒฐ๊ณผ
- ์ฐธ๊ณ ๋ฌธ์
๋ฐฐ๊ฒฝ
์ ํฌ ์ฑ์ HomeViewController๋ ContainerViewController์ ๋๋ค.
NavigateMapViewController์ JourneyListViewController๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋ ๊ฐ์ง Feature ๋ชจ๋์ด ์๋ก ๋ถ๋ฆฌ๋์ด ์๋ค๋ ์ ์ด ๋ฌธ์ ๊ฐ ๋์์ต๋๋ค.
์ด ๋ ๊ฐ์ง ๋ชจ๋์ ์๋ก ๋ค๋ฅธ ๋ชจ๋ธ์ ๊ฐ์ ์ ์ํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋๋ฌธ์ ๊ฐ์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋๋ผ๋ ๋ค๋ฅธ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ViewController๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ Feature ๋ชจ๋์ ViewController๋ ViewModel์ด ์์ฑ๋ ๋๋ Coordinator์์ ๋ณํํด ์ฃผ์ ํ ์ ์์ง๋ง,
์ด๋ฐ ๋์ ์ค๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
๊ณผ์
Coordinator
์ ํฌ ์ฑ์ ๋ ๊ฐ์ Feature ๋ชจ๋๊ณผ Data ๋ ์ด์ด ๋ชจ๋์ ๋ชจ๋ ์๊ณ ์๋ ์ธ์คํด์ค๊ฐ ์์๊น ์ฐพ์๋ณด์์ต๋๋ค.
์์์๋ ์ธ๊ธ ๋์๋ฏ์ด ๋ฑ ํ๋ ์๋๋ฐ, ๋ฐ๋ก Coordinator์ ๋๋ค.
ํ์ง๋ง Coordinator์ ์ญํ ์ ๋ช ํํฉ๋๋ค.
Navigation Controller๋ฅผ ์ฌ์ฉํ ๊ฐ ViewController ๊ฐ์ ์ด๋๊ณผ
์์ฑ๋ ๋ ํ์ํ ๋ฐ์ดํฐ์ ๋ณํ ๋ฐ ์ฃผ์ ์ด Coordinator์ ์ญํ ์ ๋๋ค.
๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ Coordinator์ ์ญํ ์ด ์๋ ๊ฒ์ด์ฃ .
๊ทธ๋ ๋ค๋ฉด ๋ฐฉ๋ฒ์..?
๊ทธ๋ ๋ค๋ฉด ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง ์ ๋๊ฐ ๋จ์ต๋๋ค.
์ฌ๋ฌ Feature๋ค์ด ๊ณตํต์ ์ผ๋ก ์ฃผ์ ๋ฐ์ ํจ๊ป ์ฌ์ฉํ๋ ๋ชจ๋ธ ๋ชจ๋์ ๋ง๋ค๋๊ฐ..
๊ฐ Feature ๊ฐ์ ๊ตํ๋๋ ๋ก์ง์ ๋ด๋นํด ์ฒ๋ฆฌํ๋ Adapter์ ๊ฐ์ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ด์ฃ .
๊ทธ๋ฆฌ๊ณ ๋๋๊ฒ๋ ์ด ๋ ์ญํ ์ ํ๋ ๋ ์ด์ด๋ฅผ ์ ํฌ๋ ์ด๋ฏธ ์คํ๋ฆฐํธ ๊ธฐ๊ฐ๋์ ํ์ตํ์ต๋๋ค.
๋ฐ๋ก Clean Architecture์ Domain ๋ ์ด์ด์ ๋๋ค. ๐ซข
Domain Layer
๊ทธ๋ฌ๋ฉด Domain ๋ ์ด์ด๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ ๋ณดํต ์ด ๋ ์ด์ด์ ์ด๋ค ์ญํ ์ด ๋ค์ด๊ฐ๋์ง ์์๋ด ์๋ค.
์๋๋ก์ด๋ ์ง์์ ์์ฃผ ์น์ ํ ๋ฌธ์๊ฐ ์๋๋ผ๊ณ ์..
ํด๋น ๋ฌธ์๋ฅผ ํ ๋ฒ ์ค์ ์ ์ผ๋ก ๋ณด๊ฒ ์ต๋๋ค.
๋๋ฉ์ธ ๋ ์ด์ด๋ UI ๋ ์ด์ด์ ๋ฐ์ดํฐ ๋ ์ด์ด ์ค๊ฐ์ ์๋ "์ ํ์ " ๋ ์ด์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๊ฑด ์ด๋ฏธ ์ ํฌ๊ฐ ๊ฒฝํ์ ํตํด ์๊ณ ์์ฃ ? ๋ชจ๋ํ๋ฅผ ํ์ง ์์๋ค๋ฉด ์ ํฌ ์ฑ๋ ๊ตณ์ด ํ์ํ์ง ์์์ ๋ ์ด์ด์์ ์๋ ์์ต๋๋ค.
UseCase
๋๋ฉ์ธ ๋ ์ด์ด์์ ๋น ์ง ์ ์๋ UseCase์ ๋๋ค.
๋๋ฉ์ธ ๋ ์ด์ด์ ๋ํด ์ค๋ช ํ๋ ค๋ฉด ์ค์ํ ํ๋์ ์ ์ ๋ฅผ ๊น๊ณ ๊ฐ์ผํฉ๋๋ค.
ํ๋ซํผ๊ณผ ์๊ด์์ด ํ ์คํธ ๊ฐ๋ฅํ๊ณ , ์ํ๋์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ ํ๋ซํผ์ด๋ iOS, macOS ๊ฐ์ ํ๋ซํผ์ ๋๋ค.
UIKit์ ์ฌ์ฉํ๋, AppKit์ ์ฌ์ฉํ๋ ๋๋ฉ์ธ ๋ ์ด์ด์ ์ํด์๋ ๋ก์ง๋ค์ ์ํ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
์ ์ด๋ฐ ์ ์ ๊ฐ ํ์ํ ๊น์?
๋๋ฉ์ธ ๋ ์ด์ด์ ์ญํ ์ ๋ํด ์๊ฐํด๋ณด๋ฉด ์ฝ์ต๋๋ค.
๋น์ฆ๋์ค ๋ก์ง์ ์บก์ํ๋ฅผ ๋งก๊ณ ์๊ณ , ์ฌ๋ฌ ViewModel์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ UseCase๋ ViewModel์ ๋ํ ์ ๋ณด๋ฅผ ์๊ณ ์์ผ๋ฉด ์๋๊ณ , ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๋ ์ด์ด์ ๋ํ ์ข ์์ฑ๋ง ๊ฐ๊ฒ ๋ฉ๋๋ค.
์ฌ๋ฌ ViewModel๋ค์์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์, ๋ณดํต ViewModel๋ค์ด ์ฌ์ฉํ๋ ๋ชจ๋ธ๋ค์ ๋ํ ์ ์๋ ์ด Domain ๋ ์ด์ด์ ํฌํจ๋ฉ๋๋ค.
MusicSpot ์์๋?
์ฌ์ค ์ ํฌ ์ฑ์ UseCase๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ทธ ํ์์ฑ์ ๋๋ผ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ธ๋ฐ์...
์ ํฌ ์ฑ์ ์ค๋ณต์ ์ผ๋ก ๊ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ ViewModel์ด "์์ง๊น์ง๋" ์์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ UIKit ์ธ์ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ฉด ๊ทธ๊ฒ๋ ์๋์ฃ .
๋๋ฌธ์ UseCase์ ๋ํ ์ฌ์ฉ์ ์กฐ๊ธ ์ ์ณ๋๊ณ , ์ฐ์ ๊ณต์ฉ์ Model Layer๋ก์จ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค.
๊ฒฐ๊ณผ
๊ฒฐ๊ตญ ๋ชจ๋ Feature ํจํค์ง๋ค์ด ๊ณตํต์ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ฒ ๋์ต๋๋ค.
์ค๊ณ ๊ณผ์ ์์ ์ข ๋ ์ ํฌ ์ฑ์ ์ํฉ์ ๋ํด ๊ณ ๋ฏผํด๋ดค์ผ๋ฉด ์ผ์ด๋์ง ์์์ ์ผ ๊ฐ์๋ฐ ์กฐ๊ธ ์์ฝ๋ค์.
๊ทธ๋๋ ์ด๋ฒ ๊ธฐํ์ ์ฅ/๋จ์ ๋น๊ต๋ก๋ ์ ์ ์๋ ๋ฌธ์ ๋ค์ด ์ถฉ๋ถํ ๋ง์ด ์๊ธธ ์ ์๋ค๋ ์ ์ ๊นจ๋ฌ์์ต๋๋ค.