
TDD์ Clean Architecture๋ก ์ฌ๊ตฌ์ถํ fromm ๋ผ์ด๋ธ ์๋น์ค

- #fromm
- #๋ฆฌํฉํฐ๋ง
- #iOS
- #TDD
- #Clean Architecture
fromm ๋ผ์ด๋ธ ์๋น์ค ์๊ฐ
์๋
ํ์ธ์! fromm
์ฑ์ iOS
๊ฐ๋ฐ์ ๋ด๋นํ๊ณ ์๋ ์ ๊ตญํฌ์
๋๋ค. fromm
๋ผ์ด๋ธ ์๋น์ค๋ ์ํฐ์คํธ๊ฐ ์ํ๋ ์๊ฐ์ ๋ผ์ด๋ธ ๋ฐฉ์ก์ ์์ํ๋ฉด, ํฌ๋ค์ด ์ค์๊ฐ์ผ๋ก ๋ฐฉ์ก์ ์ฐธ์ฌํด ์ํตํ ์ ์๋ ๊ธฐ๋ฅ์
๋๋ค. ์ด ๊ณผ์ ์์ ์ฑํ
๊ธฐ๋ฅ์ ํตํด ์๋ฐฉํฅ ์ปค๋ฎค๋์ผ์ด์
์ด ๊ฐ๋ฅํ๋๋ก ์ง์ํฉ๋๋ค.
๋ฐฐ๊ฒฝ
๊ธฐ์กด ๋ชจ๋์ ์ฌ์ฉ์ ์
์ฅ์์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ฌธ์ ์์ด ์ ์๋ํ๊ณ ์์๊ณ , ์์ ์ฑ๊ณผ ์ฑ๋ฅ ๋ฉด์์๋ ๋๋ ทํ ์ด์๋ ์์์ต๋๋ค. ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก๋ ๊ตฌ์กฐ๊ฐ ๋ณต์กํ๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ด ์ ์ด ์์์ต๋๋ค. ํนํ ๊ธฐ๋ฅ ์ถ๊ฐ๋ ์์ ์ ์ฝ๋ ํ์
๊ณผ ๋ณ๊ฒฝ ๋ฒ์ ์์ธก์ด ์ฝ์ง ์์๊ณ , ํ
์คํธ ์์ฑ ๋ํ ์ด๋ ค์ด ๊ตฌ์กฐ์์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก, fromm
๋ผ์ด๋ธ ์๋น์ค ๋ชจ๋์ ์ ๋ฉด์ ์ธ ๊ตฌ์กฐ ๊ฐํธ์ ๊ฒฐ์ ํ๊ฒ ๋์์ต๋๋ค.
์ ์ง๋ณด์ ๊ฐ์ ์ด ํ์ํ๋ ๋ฐฐ๊ฒฝ
๊ธฐ์กด ๊ตฌํ์ TCA
ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ๋ค์ด ์์์ต๋๋ค.
- ์ด์ ๋ฐ์ ์ ์์ธ ํ์ ์ด ์ด๋ ต๋ค
- ํ๋ ์์ํฌ ๋ด๋ถ ์ถ์ํ ๊ณ์ธต์ด ๊น๊ณ ๋ณต์กํ์ฌ, ๋ฐํ์์์ ๋ฐ์ํ ๋ฌธ์ ์ ์์ธ์ ๋น ๋ฅด๊ฒ ์ถ์ ํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค.
- ์ํ ๋ณ๊ฒฝ ์ ์ ์ฒด ๋ทฐ ์ ๋ฐ์ดํธ ๊ฐ๋ฅ์ฑ
TCA
์Store
๋ ์ ์ฒด ์ํ๋ฅผ ๊ด์ฐฐํ๋ ๊ตฌ์กฐ๋ก ๋์ด ์์ด, ํ๋์ ์ํ ๋ณ๊ฒฝ์ด ๋ถํ์ํ๊ฒ ์ ์ฒดView
์ ๋ฐ์ดํธ๋ฅผ ์ ๋ฐํ ์ ์์์ต๋๋ค. ์ด๋SwiftUI
์ ๋ฐ๋ ์ฌ๊ณ์ฐ ๋ฐฉ์๊ณผ ๊ฒฐํฉ๋๋ฉด์ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ฌ์ง๊ฐ ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
- Reducer๋ฅผ ์ธ๋ถํํ ์๋ก ๋ก์ง ํ๋ฆ์ด ๋ถ์ฐ๋จ
- ๊ธฐ๋ฅ ๋จ์๋ก
Reducer
๋ฅผ ์๊ฒ ๋๋๋ค ๋ณด๋ฉด, ํ๋์ ์ฌ์ฉ์ ์ก์ ์ด ์ฌ๋ฌ Layer๋ฅผ ํตํด ๋ถ์ฐ ์ฒ๋ฆฌ๋์ด ๋ก์ง์ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ ์ด๋ ต์ต๋๋ค.
- Straight-line ํ๋ฆ์ ๋ถ์ฌ๋ก ์ธํ ๊ฐ๋ ์ฑ ์ ํ
Reducer
๋ด๋ถ์์ ๋ถ๊ธฐ์ ์ด๋ฒคํธ ์ ํ๊ฐ ์ฆ์ ์ฝ๋๊ฐ ์ง๊ด์ ์ผ๋ก ์ฝํ์ง ์์ผ๋ฉฐ, ์์ฐจ์ ์ธ ์คํ ํ๋ฆ์ ํ์ ํ๋ ๋ฐ ์ด๋ ค์์ด ์์์ต๋๋ค.
- ๊ธฐ๋ณธ Swift ๊ธฐ๋ฅ์ ์ถ์ํ์ ๋ฐ๋ฅธ ํ์ต ๋ฐ ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ
TCA
๋Swift
์ ์ํ ๊ด๋ฆฌ, ๋น๋๊ธฐ ์ฒ๋ฆฌ, ์์กด์ฑ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ณ ๋๋ก ์ถ์ํํ์ฌ ์ ๊ณตํ์ง๋ง, ๊ทธ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๋ ๋ฐ ์ถ๊ฐ์ ์ธ ํ์ต์ด ํ์ํ์ต๋๋ค. ๋ํ ๋๋ฒ๊น ์TCA
๋ด๋ถ ๋์๊น์ง ์ถ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ฆ์์ต๋๋ค.
- ์ง์ ๋ฐ์ธ๋ฉ ๋ฐฉ์๋ณด๋ค ํจ์จ์ด ๋จ์ด์ง ์ ์์
- View์ ์ง์ ์ํ๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ฐฉ์๋ณด๋ค ์ค๊ฐ ๊ณ์ธต(
Reducer
๋ฑ)์ ๊ฑฐ์น๋ฉด์ UI ์ ๋ฐ์ดํธ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
๊ธฐ๋ฅ ์์ฒด๋ ์์ ์ ์ผ๋ก ๋์ํ์ง๋ง, ๊ตฌ์กฐ์ ๋ณต์ก์ฑ๊ณผ ๋ฎ์ ์์ง๋๋ก ์ธํด ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๋ ์ต๋๋ค. 1๋
๊ฐ TCA
๋ฅผ ์คํ์ ์ผ๋ก ๋์
ํด ์ฌ์ฉํด ๋ณธ ๊ฒฐ๊ณผ, ์์ ๊ฐ์ ๊ตฌ์กฐ์ ํ๊ณ๊ฐ ๋ช
ํํด์ก๊ณ , ์ด์ ๋ฐ๋ผ ํ์ฌ๋ TCA
๋์
์ ์ค๋จํ ์ํ์
๋๋ค.
์ฌ๊ตฌ์ถ์ ํ์์ฑ
TCA
๋ ์์ Reducer
๊ฐ ๋ค์์ ํ์ Reducer
๋ฅผ ์์ฝ๊ฒ ์กฐํฉํ์ฌ ๊ตฌ์ฑํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ด, ์ผ๊ด๋ ์ํคํ
์ฒ ๊ตฌ์กฐ ์๋ ๊ธฐ๋ฅ์ ๋ชจ๋ํํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๊ตฌ์กฐ๊ฐ ์ค์ง์ ์ธ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ผ๋ก ์ด์ด์ง๊ธฐ ์ํด์๋, ๊ฐ ํ์ ๋ชจ๋์ด ๋ช
ํํ๊ฒ ๋ถ๋ฆฌ๋๊ณ ๋์ ์์ง๋์ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ถ ์ํ์ฌ์ผ ํฉ๋๋ค.
๊ธฐ์กด ๊ตฌํ์์๋ ํ๋์ ํ๋ฉด์ ๋ํด ์ต์์ Reducer
๊ฐ ์กด์ฌํ๊ณ , ํ์ ๋ทฐ๋ ์ ์ฌํ Usecase
๋จ์๋ก ํ์ Reducer
๊ฐ ๊ตฌ์ฑ๋์ด ์์์ต๋๋ค. ํ์ง๋ง ์ ์ฌํ Usecase
๋ฅผ ์๋ก ๋ค๋ฅธ ํ๋ฉด ๊ฐ์ ์ฌ์ฌ์ฉํ๋ ค๋ค ๋ณด๋ ์กฐ๊ฑด ๋ถ๊ธฐ๊ฐ ์ฆ์์ก๊ณ , ์ ์ ์ฝ๋์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ์ต๋๋ค. ์ด๋ฒคํธ์ ํ๋ฆ ๋ํ ์์ โ ํ์ โ ์์๋ก ์ค๊ฐ๋ฉฐ ์ฒ๋ฆฌ๋๋ ๊ตฌ์กฐ์ฌ์, ํน์ ์ก์
์ ์ ํ ๋งฅ๋ฝ์ ํ์
ํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ณ์ธต์ ํ์ํด์ผ ํ๋ ์ํฉ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ต๋๋ค.
๊ฒฐ๊ตญ ๋จ์ผ ์ด๋ฒคํธ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ๊ฐ ์ด๋ ค์์ก๊ณ , ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ํ
์คํธํ ๋ ์ ์ฒด ๊ตฌ์กฐ์ ๋ํ ์ดํด๊ฐ ์ ํ๋์ด์ผ ํ๋ ๋ถ๋ด์ด ์ปค์ก์ต๋๋ค. ์ด๋ฌํ ์ ์ด ๊ตฌ์กฐ์ ์ธ ํผ๋ก๋๋ฅผ ์ ๋ฐํ์ผ๋ฉฐ, fromm
๋ผ์ด๋ธ ์๋น์ค์ ์ฅ๊ธฐ์ ์ธ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ์ ๋ ์๋ก์ด ์ํคํ
์ฒ๋ก์ ์ ํ์ด ํ์ํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
๋ฆฌํฉํฐ๋ง์ ํต์ฌ ๋๊ตฌ
์ด๋ฒ ๋ฆฌํฉํฐ๋ง์ ํต์ฌ ๋ชฉํ๋ ํ๊ท ๋ฒ๊ทธ ์์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด์์ผ๋ฉฐ, ์ด๋ฅผ ์ํด ๋ ๊ฐ์ง ํต์ฌ ๋๊ตฌ๋ฅผ ์ ๋ต์ ์ผ๋ก ํ์ฉํ์ต๋๋ค: ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD
)๊ณผ Clean Architecture
์
๋๋ค.
TDD
TDD
๋ ๋จ์ ํ
์คํธ
๋ฅผ ๋จผ์ ์์ฑํ๊ณ ๊ทธ์ ๋ง์ถฐ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์์ผ๋ก, ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ์ต๋๋ค. ๋ชจ๋ Usecase
๋ก์ง์ LiveUsecases
ํ๊ฒ์ ์์ฑ๋์๊ณ , ํ
์คํธ ์ฝ๋์ ํจ๊ป ๊ด๋ฆฌ๋์์ต๋๋ค. ํ
์คํธ๋ ์ฃผ๋ก ์ํ ๊ฒ์ฆ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋, ์ํ๊ฐ ๋ช
ํํ ๋๋ฌ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ํ์ ๊ธฐ๋ฐ ํ
์คํธ๋ก ๋ณด์ํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ค๊ณ ๊ฐ์ ๋ฟ ์๋๋ผ ํ๊ท ํ
์คํธ ์๋ํ ํจ๊ณผ๋ ํจ๊ป ์ป์ ์ ์์์ต๋๋ค.
Clean Architecture
Clean Architecture
๋ ๋ชจ๋ ๊ตฌ์กฐ๋ฅผ ์ํ ๊ณ์ธต์ผ๋ก ๋๋๊ณ ๊ฐ ๊ณ์ธต ๊ฐ์ ์ปดํ์ผ ํ์ ์์กด์ฑ์ ๋ฐ๊นฅ์์ ์์ผ๋ก๋ง ํฅํ๋๋ก ์ ํํจ์ผ๋ก์จ, ๋ณ๊ฒฝ์ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ด์ ์ ๋ง์ท์ต๋๋ค. ๊ฐ ๊ณ์ธต์ Swift Package
์ ํ๊ฒ์ผ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.
๋ฐ๋๋ก ์คํํ์ ์์กด์ด ํ์ํ ๊ฒฝ์ฐ(์: Usecase
๊ฐ Adapter๋ฅผ ํธ์ถํด์ผ ํ ๋)๋ DI
(์์กด์ฑ ์ฃผ์
)๋ฅผ ํ์ฉํ์ต๋๋ค. DI๋ Pure DI
๋ฐฉ์์ ์ฑํํ๊ณ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ง์ ๊ตฌํํ์์ผ๋ฉฐ, Clean Architecture
์ Main Layer๋ฅผย ๋ณ๋์ ํ๊ฒ์ผ๋ก ๋์ด ๊ฐ์ฒด ์์ฑ ๋ฐ ์์กด์ฑ ์ฃผ์
์ ๋ด๋นํ๊ฒ ํ์ต๋๋ค.
๋ํ, Clean Swift
ํจํด์ย ์ฑํํ์ผ๋ฉฐ, ๊ทธ๋๋ก ์ ์ฉํ์ง ์๊ณ Clean Architecture
๊ตฌ์กฐ์ ๋ง๋๋ก ๋ณํํ์ฌ ๋์
ํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, View
โ Interactor
โ Presenter
โ View
๋ก ์ด์ด์ง๋ ํ๋ฆ์ด ๋ช
ํํด์ก๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ์กด ํ
ํ๋ฆฟ์ ๋ณด์ํด ์ฌ์ฉํ์ฌ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋ ์์ฑ์ ์ค์ด๊ณ ์ผ๊ด๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ ์ ์์์ต๋๋ค.
Clean Swift ๊ตฌ์กฐ๋
์์ง์ ๋ถ๋ฆฌ
๋ฆฌํฉํฐ๋ง ์ ๋ต
- ์์ง๋ ํฅ์
- ํ๋์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ํด๋น ์ด๋ฒคํธ์ ํ๋ฆ์ ํ ๊ณณ์์ ํ์
ํ ์ ์๋๋ก
Interactor
์ค์ฌ์ผ๋ก ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ต๋๋ค. ์ด๋ก ์ธํด ์ฝ๋์ ํ๋ฆ์ด ๋ช ํํด์ง๊ณ ๋๋ฒ๊น ์ด๋ ๋ณ๊ฒฝ ์ ์ถ์ ์ด ์ฌ์์ก์ต๋๋ค.
- ๊ธฐ์กด ๋ชจ๋์ ๋๋ถ๋ถ์ ๊ทธ๋๋ก ์ฌ์ฉ
- UI ๊ตฌ์กฐ์ ๊ด๋ จ๋ ์์(๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ, ํ๋ฉด ์),
Entity
๋ชจ๋ธ, ํ๋ ์์ํฌ ๋ฐDriver
, Backend API ๋ชจ๋ธ ๋ฑ์ ๊ทธ๋๋ก ์ ์งํ๋,TCA
์ ์์กดํ๋ ์ฝ๋๋ ์ ๊ฑฐํ๊ณ ์ฌ์์ฑํ์ต๋๋ค.
- SwiftUI์ ๊ธฐ๋ณธ ์ํ ๊ด๋ฆฌ ๋ฐฉ์ ์ฌ์ฉ
@State
,@ObservedObject
,@Binding
ย ๋ฑ์SwiftUI
๋ณธ์ฐ์ ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ํ์ฉํด ๋ทฐ์ ์ํ๋ฅผ ์ง์ ๋ฐ์ธ๋ฉํจ์ผ๋ก์จ, ์ค๊ฐ ๊ณ์ธต์ ์ ๊ฑฐํ๊ณ UI ๋ฐ์์ฑ์ ๊ฐ์ ํ์ต๋๋ค.
- Reducer์ Client์ ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑ
- ๊ธฐ์กด
TCA
๊ตฌ์กฐ์์Reducer
์ Client์ ์์ฑ๋์ด ์๋ ์ฝ๋๋ฅผ ์๋ก์ด ๊ตฌ์กฐ์ ๋ง์ถฐUsecase
,Adapter
,Driver
Layer๋ก ์ญํ ์ ๋ฐ๋ผ ๋ถ๋ฆฌ ์ฌ๋ฐฐ์นํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ์ผ๋ถ ๋ก์ง์ ํตํฉ๋๊ณ , ์ผ๋ถ๋ ๋ถ๋ฆฌ๋๋ฉด์ ๊ฐ ํ์ ์ ์ฑ ์์ด ๋ณด๋ค ๋จ์ผํด์ก์ต๋๋ค.
- Clean Architecture ์ํ ๊ณ์ธต ๋ถ๋ฆฌ ์ ์ฉ
- ์์ง์ ์ธ ๋ถ๋ฆฌ๋ฅผ ์ํด ๋ผ์ด๋ธ ๋ชจ๋์ ํ๋์ ํจํค์ง๋ก ๋ง๋ค์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์์ง์ ์ธ ๊ณ์ธต์ ํ๊ฒ์ผ๋ก ๋ถ๋ฆฌํด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์กฐํํ์ต๋๋ค. ๊ฐ ๊ณ์ธต ๊ฐ ์ปดํ์ผ ํ์ ์์กด์ฑ์ ์ค์ง ๋ฐ๊นฅ์์ ์์ชฝ์ผ๋ก๋ง ํฅํ๋๋ก Package.swift๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
์ํ์ ๋ถ๋ฆฌ
- @Shared ์ํ ์ ๊ฑฐ ๋ฐ ๋ช ์์ ์์กด์ฑ ์ฃผ์
@Shared
,@SharedReader
์ฒ๋ผ ๊ฐ์ ์ ์ผ๋ก ์ํ๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ์์ ์ง์ํ๊ณ , ๋ชจ๋ ์์กด์ฑ์ ๋ช ์์ ์ผ๋ก ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๋ณ๊ฒฝ ์ถ์ ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ํ๋ณดํ์ต๋๋ค.
- Entity ์ค์ฌ์ ๋๋ฉ์ธ ๋ก์ง ์ฌ๊ตฌ์ฑ
- ๊ธฐ์กด
Entity
ํ์ ์๋ ๋ก์ง์ด ๊ฑฐ์ ์กด์ฌํ์ง ์์์ต๋๋ค. ๋๋ถ๋ถ ๋ณ์๋ง ์ ์๋์ด ์์๊ณ , ํด๋น ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ก์ง์ ํด๋ผ์ด์ธํธ ๊ฐ์ฒด ๋ด๋ถ์ ๋ถ์ฐ๋์ด ์์ด ์ค๋ณต์ด ๋ฐ์ํ๊ณ ์์ง๋๊ฐ ๋ฎ์์ต๋๋ค. - ์ด๋ฌํ ๋ถ์ฐ๋ ๋ก์ง์
Entity
๋ด๋ถ๋ก ์ด๋์์ผ, ๋๋ฉ์ธ ์ค์ฌ ์ค๊ณ ์์น์ ๋ง๊ฒ ์ญํ ์ ์ฌ๋ฐฐ์นํ์ต๋๋ค. ์ธ๋ถ์์๋ ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ํ์ฌ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๊ฒ ๋์๊ณ , ๋ถํ์ํ ์์ฑ์ private์ผ๋ก ์ ํํด ์บก์ํ ์์ค๋ ๋์์ต๋๋ค.
- TDD ๊ธฐ๋ฐ Usecase ์ค๊ณ ๋ฐ ๊ตฌํ
- ๋ชจ๋
Usecase
๋ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ ๊ทธ์ ๋ง์ถฐ ๊ตฌํํ๋TDD
๋ฐฉ์์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. - ์ด ๊ณผ์ ์ ํตํด ๊ฐ
Usecase
์ ๊ฒฝ๊ณ์ ์ฑ ์์ด ๋ช ํํ๊ฒ ๋๋ฌ๋ฌ๊ณ , ํ ์คํธ ๊ฐ๋ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ ์ ์์์ต๋๋ค.
- ๋ฆฌํฉํฐ๋ง ์์น ์ค์
- ๋ฆฌํฉํฐ๋ง ๊ณผ์ ์์ ๊ธฐ๋ฅ์ ์ธํ์ ๋์์ด๋ ๊ฒฐ๊ณผ๋ ๋ณ๊ฒฝํ์ง ์๋๋ก ํ๋ค๋ ์์น์ ์งํค๊ณ , ๋น์ ์์ ์ธ ๋ก์ง์ด๋ผ ํ๋๋ผ๋ ๊ธฐ์กด ๋ก์ง์ ๊ทธ๋๋ก ๋ฐ์ํ ํ ํ ์คํธ์ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ํฅํ ๊ฐ์ ํ ์ ์๋๋ก ํ์ต๋๋ค.
๊ตฌ์ฒด์ ์ธ ์คํ ๋ฐฉ์
์ด๋ฒ ๋ฆฌํฉํฐ๋ง ํ๋ก์ ํธ๋ 3๋ช ์ iOS ๊ฐ๋ฐ์๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์งํํ์์ต๋๋ค. ๊ตฌ์กฐ ๊ฐ์ , ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ํ๋ณด, ์ํคํ ์ฒ ์ฌ์ค๊ณ๋ฅผ ๋์์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ค์ง์ ์ธ ์คํ ์ ๋ต์ ์๋ฆฝํ๊ณ ์ํํ์ต๋๋ค.
iOS ๊ฐ๋ฐ์๋ฅผ ์ํ TDD ์ธ์
์ ๋ 2020๋
๋ ๋ถํฐ ์ง๊ธ๊น์ง TDD
๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐ์ ํด์์ต๋๋ค. ํจ๊ปํ๋ ํ์๋ค์ด TDD
๋ฅผ ์ค๋ฌด์์ ์ ์ฉํด ๋ณธ ๊ฒฝํ์ด ์์๊ธฐ ๋๋ฌธ์, ํ๋ก์ ํธ ์ด๊ธฐ ๋จ๊ณ์์ 4์๊ฐ์ ๊ฑธ์น ๋ผ์ด๋ธ ์ฝ๋ฉ ์ธ์
์ ์งํํ์ต๋๋ค. ์ด๋ก ์ค๋ช
๊ณผ ํจ๊ป ๊ฐ๋จํ ๊ธฐ๋ฅ์ TDD
๋ก ๊ตฌํํด๋ณด๋ ์ค์ต์ ๋ณํํ์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ฒด๊ฐ ๋์ผํย ํ
์คํธ ๋ฐ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ์ตํ ์ ์๊ฒ ๋์์ต๋๋ค.
์คํ๋ผ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐฉ์
๊ฐ ๊ฐ๋ฐ์๋ ์์ ์ด ๋งก์ ์์ญ์ ๊ธฐ๋ฅ์ TDD
๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ ํ, ์คํ๋ผ์ธ์์ ์ ์ ํจ๊ป ๋ฆฌ๋ทฐํ๋ ๋ฐฉ์์ผ๋ก ๋น ๋ฅธ ํผ๋๋ฐฑ ์ฌ์ดํด์ ํ๋ณดํ์ต๋๋ค. ์ฒ์์๋ ํ์ด ํ๋ก๊ทธ๋๋ฐ๋ ์๋ํ์ผ๋, ์์
์๊ฐ ๋จผ์ ๊ณ ๋ฏผํ๊ณ ๊ฐ๋ฐ ํ์ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ๊ฐ์ ํ๋ ํ๋ฆ์ด ๋ ํจ๊ณผ์ ์ด์์ต๋๋ค.
์ธ์ ํ ์คํธ๋ ํ์์๋ก ์งํ
์ธ์ํ ์คํธ๋ ์ผ์ ์ ์ฐ์ ์์์์ ๋ฐ๋ ธ์ต๋๋ค. 1์ฐจ๋ก ๋ชจ๋ ๊ตฌํ์ด ์๋ฃ๋ ํ ์ํํ์ต๋๋ค.
๊ตฌํ ์์: ๋ฐ๊นฅ์์ ์์ผ๋ก, ๋ค์ ์์์ ๋ฐ๊นฅ์ผ๋ก
ํ๋ฉด ํ๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์์
๋จ์๋ก ์ ํ์ต๋๋ค. ํ๋์ ํ๋ฉด์ ๋ํ ์ ์ฒด ๋ก์ง์ ๊ตฌํํ๋๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ฐ๋์ต๋๋ค. Usecase
layer์ ์๋ UI ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด ๊ตฌํ์ ์์์ ์
๋๋ค.
Interactor
๊ตฌํ:Interactor
ํ์ ์TDD
๋ก ๊ตฌํํ๋ฉฐ, UI ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ํ์ํUsecase
์ ์ธํฐํ์ด์ค ๋ฐ Adapter์ ์ธํฐํ์ด์ค๋ฅผ ๋์ถํ์ต๋๋ค.Interactor
์ ํ๋ ฅํ๋ ์๋ก์ด ๋ค์์ ํ์ ์ด ๋์ถ๋ฉ๋๋ค.ยUsecase
๊ตฌํ: 1๋จ๊ณ์์ ๋์ถ๋Usecase
ํ์ ์ ๋์ผํ๊ฒTDD
๋ก ๊ตฌํํ๋ฉฐ, ์ด ๊ณผ์ ์์ ์ญ์ ํ๋ ฅํUsecase
์ ์ธํฐํ์ด์ค ๋ฐ Adapter์ ์ธํฐํ์ด์ค๋ฅผ ๋์ถํ์ต๋๋ค.Adapter
๊ตฌํ: 2๋จ๊ณ์์ ๋์ถ๋ ์ธํฐํ์ด์ค์ ๋ง์ถ์ดAdapter
ํ์ ์ ๊ตฌํํ๊ณ , ์ด ๊ณผ์ ์์Driver
์ ์ธํฐํ์ด์ค๋ฅผ ๋์ถํ์ต๋๋ค.Driver
๊ตฌํ: ๋ง์ง๋ง์ผ๋ก 3๋จ๊ณ์์ ๋์ถ๋ ์ธํฐํ์ด์ค์ ๋ง์ถ์ด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ยDriver
๊ตฌํ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.ย
์ด๋ค ํ์
์ Driver
Layer์ ๋์ผ์ง ์ ํ๋ ๊ธฐ์ค์ ํด๋น ํ์
์ด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ์์กดํ๋์ง ์ฌ๋ถ์
๋๋ค.
Driver
Layer๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ import
ํ๋ ์ ์ผํ Layer์
๋๋ค.ย
์ฌ๊ธฐ์๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฒ๋ผ ์ด๋ค Layer์์๋ ํ์ํ ๊ฒ์ ์์ธ์ ๋๋ค.
๋ค์ ๋งํ๋ฉด Adapter
ํ์
์ ๊ตฌํํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ์ง์ import
ํ์ฌ ์ฌ์ฉํ๋ ๋์ ํ๋กํ ์ฝ์ ์ ์ํฉ๋๋ค.ย
์ด 4๋จ๊ณ๋ฅผ ํ๋ฉด ๋จ์๋ก ๋ฐ๋ณตํ์ต๋๋ค.
๊ตฌํ ์์๊ฐ ๋ฐ๊นฅ์์ ์์ผ๋ก ์์ํด์ ๋ค์ ์์์ ๋ฐ๊นฅ์ผ๋ก ๋๋๋ค๋ ์๋ฏธ๋ฅผ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ๋ฐ๊นฅ์์ ์์ ์์ผ๋ก ๊ตฌํํ๋ค๋ ๋ง์, ๊ฐ์ฅ ๋ฐ๊นฅ์ ์๋ Driver
Layer์ ๋์ธ ๋ทฐ์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ์์ชฝ์ Usecase
layer์ ๋์ธ Interactor
๊ฐ ์ฒ๋ฆฌํ๊ธฐ ์ํด Usecase
์ Adapter
ํ๋กํ ์ฝ์ ์ ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ค์ ์์์ ๋ฐ๊นฅ์ ์์ผ๋ก ๊ตฌํํ๋ค๋ ๋ง์, Adapter
ํ์
์ ๋จผ์ ๊ตฌํํ๊ณ Driver
ํ์
์ ๊ตฌํํ๋ ๊ฒ์ ๋งํฉ๋๋ค.์ด๋ฌํ ์์๋ ์ค์ง์ ์ธ ์๊ตฌ์ฌํญ ํ๋ฆ์ ๋ฐ๋ฅด๋ ๋์์, SOLID ์์น ์ค ํ๋์ธ DIP(Dependency Inversion Principle)๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ฅด๊ฒ ํด์ฃผ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋์ถ๋ ํ์
์ ๋ชจ๋ ์ค์ ์๊ตฌ๋ก๋ถํฐ ์ถ๋ฐํด ๋ถํ์ํ ์ฝ๋ ์์ฑ์ ๋ง์ ์ ์์๊ณ , ๊ณ์ธต ๊ฐ ์์กด ๋ฐฉํฅ๋ ๋จ๋ฐฉํฅ์ผ๋ก ๊ตฌํ๋์์ต๋๋ค.
ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง
ํ
์คํธ ์์ฑ ๋๊ตฌ๋ก๋ Quick
, Nimble
, Cuckoo
๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
Usecase
Layer์ ํ
์คํธ๋ฅผ ์ง์ค์ ์ผ๋ก ์์ฑํ์ต๋๋ค. ํด๋น Layer๋ ๋จ์ ํ
์คํธ
๊ฐ ์ ์ฉ๋ ํต์ฌ ๋๋ฉ์ธ ๋ก์ง์ด๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ ํ๋ณดํ๋ ๋ฐ ์ค์ํ ์์น๋ฅผ ์ฐจ์งํฉ๋๋ค.
๋ชจ๋ Usecase
๋ ๊ฐ๋ณ ํ
์คํธ ํ๊ฒ์ธ LiveUsecases
์์ ๊ด๋ฆฌ๋์๊ณ , ํด๋น ํ๊ฒ๋ง์ ํ
์คํธ ์คํ ๋์์ผ๋ก ์ง์ ํ์ฌ ์ ํํ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ธก์ ํ์ต๋๋ค. ํ
์คํธ ๊ฒฐ๊ณผ, ์ด Layer์ ์ปค๋ฒ๋ฆฌ์ง๋ ์ฝ 99%๋ฅผ ๊ธฐ๋กํ์ต๋๋ค.
์๋ ์ธ์ ํ ์คํธ
์ ์ฒด ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ฃ๋ ์ดํ, ์๋ ์ธ์ ํ
์คํธ๋ฅผ ์ง์ค์ ์ผ๋ก ์ํํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ์ฝ 80์ฌ ๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋์์ผ๋ฉฐ, ๊ทธ ๋๋ถ๋ถ์ ํ
์คํธ ์ฝ๋๊ฐ ์กด์ฌํ์ง ์๋ Adapter
๋๋ Driver
Layer์ ๊ฐ์ ์ฃผ๋ณ๋ถ์์ ๋ฐ์ํ์ต๋๋ค.
๋ฐ๊ฒฌ ์ฆ์ ์์ ๊ณผ ๋ณด์ ์์ ์ ๋ณํํ์ฌ ์์ ์ฑ์ ์ ์ง์ ์ผ๋ก ๋์ด์ฌ๋ฆด ์ ์์์ต๋๋ค.
๋ํ, ์๋ ํ ์คํธ ๊ณผ์ ์ ํ ์คํธ ์ฝ๋๊ฐ ์๋ ์์ญ์ ์๋ณํ๊ณ ํฅํ ํ ์คํธ ๋ณด๊ฐ์ด ํ์ํ ์ง์ ์ ํ์ ํ๋ ๋ฐ๋ ์ ์ฉํ๊ฒ ํ์ฉ๋์์ต๋๋ค.
์๋ ๋จ์ ํ ์คํธ
์๋ํ๋ ํ
์คํธ์ ์ ๋ขฐ๋๋ฅผ ๊ฒ์ฆํ๊ณ , ํ
์คํธ ์ฝ๋ ์์ฒด์ ์ค๋ฅ๊ฐ ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ์๋์ผ๋ก Usecase
์ ๋ํ TC๋ฅผ ๋ชจ๋ ํ
์คํธํ์ต๋๋ค.
์ด 480์ฌ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๊ณ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ 98.6 % ์ ๋๋ค.
ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง
์์ฐจ์ ์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ๋ฉด์ ์ค์ ๋์์ด ๊ธฐ๋ํ ๊ฒฐ๊ณผ์ ์ผ์นํ๋์ง ํ๋ํ๋ ํ์ธํ์ต๋๋ค. ์ด ๊ณผ์ ์์๋ ์์ ์ด ์์ฑํ์ง ์์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ฒ์ฆํ๋ ๊ต์ฐจ ํ ์คํธ ๋ฐฉ์์ ์ฑํํ์ฌ, ์ ์ ๊ฒฌ ์์ด ํ ์คํธ ์ฝ๋ ๋ฐ ๊ตฌํ ์ฝ๋๋ฅผ ์ ๊ฒํ ์ ์์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ์ฝ 15๊ฑด์ ํฌ๊ณ ์์ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์์ ํ ์ ์์์ต๋๋ค. ํ ์คํธ ์ฝ๋ ์์ฒด๋ฅผ ํ ์คํธํ๋ ๋ง์ง๋ง ๊ฒ์ฆ ๋จ๊ณ์์ผ๋ฉฐ, ์๋ํ๋ ํ ์คํธ์ ๋ํ ์ ๋ขฐ๋๋ฅผ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ์ต๋๋ค.
์ฑ๊ณผ
์ด๋ฒ ๋ฆฌํฉํฐ๋ง์ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ฑ๊ณผ๋ฅผ ๋ฌ์ฑํ ์ ์์์ต๋๋ค.
์ ์ง๋ณด์์ฑ ๊ฐํ
- ์ด๋ฒคํธ ๋ฐ์๋ถํฐ UI ๋ฐ์๊น์ง์ ํ๋ฆ์
Interactor
์ค์ฌ์ผ๋ก ์ง์ค์์ผ, ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ํ๋์ ํ์ ํ ์ ์๋๋ก ๊ฐ์ ํ์ต๋๋ค. Clean Architecture
๊ธฐ๋ฐ ์ํ Layer ๋ถ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ ๋ถํ์ํ ๊ฒฐํฉ๋๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.Pure DI
๋ฅผ 100% ์ ์ฉํ์ฌ ์ฝ๋์ ์์กด์ฑ์ ๋ชจ๋ ๋๋ฌ๋ด์ด ์จ๊ฒจ์ง ์์กด์ฑ์ผ๋ก ์ธํ ๊ฐ๋ ์ฑ ์ ํ ๋ฐ ๋ฒ๊ทธ ์ ๋ฐ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์์์ต๋๋ค.- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ํฅ ๋ฒ์๋ฅผ
Driver
Layer๋ก ์ ํํ์ต๋๋ค.
ํ๊ท ๋ฒ๊ทธ ์ต์ํ
- ๊ฑฐ์ ๋๋ถ๋ถ์
Usecase
์ ๋ํด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ, ๋ฆฌํฉํฐ๋ง ๊ณผ์ ์์ ์๋์น ์๊ฒ ๋ก์ง์ด ๋ฌ๋ผ์ง๋ ์ํฉ์ ์ต๋ํ ๋ฐฉ์งํ์ต๋๋ค. - ํน์
Usecase
ํ์ ์ ๋ฆฌํฉํฐ๋งํ ๋ ํ ์คํธ ์ฝ๋ ๋๋ถ์ ์์ ํ๊ณ ๋น ๋ฅด๊ฒ ๋ฆฌํฉํฐ๋ง ํ ์ ์์์ต๋๋ค. ๋จ์ ํ ์คํธ
์ฝ๋๋ ์๋๋จ์ ํ ์คํธ
์๋ ํ์ฉ๋์ด ๋ณ๋์ TC ๋ฌธ์๋ฅผ ์์ฑํ๋ ์๊ณ ๋ฅผ ๋์ด์ฃผ์์ต๋๋ค.- ์ด ํ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋ ๋ ํ๊ธฐ ๋ฒ๊ทธ๋ฅผ ์ต์ํํ๋๋ฐ ๋์์ด ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
๊ฐ์ฌ์ ๋ง
์ด๋ฒ ํ๋ก์ ํธ์์ Clean Architecture
, TDD
,๋จ์ ํ
์คํธ
, Clean Swift
, Pure DI
๋ฑ ์ฒ์ ๋์
ํ๋ ๊ธฐ์ ๋ค์ ๋น ๋ฅด๊ฒ ํ์ตํ๊ณ ํจ๊ป ๊ตฌํํด์ค iOS ํ์๋ค์๊ฒ ๊น์ ๊ฐ์ฌ๋ฅผ ์ ํฉ๋๋ค. ์๋ก์ด ๋ฐฉ์์ ์ด๋ฆฐ ๋ง์์ผ๋ก ์ํด์ค ๋๋ถ์ ๊ตฌ์กฐ์ ์ธ ๋ฆฌํฉํฐ๋ง์ ์๋ฃํ ์ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ , ํ๋ก์ ํธ๋ฅผ ๋ฏฟ๊ณ ๋งก๊ฒจ์ฃผ์ ํ์ฅ๋๊ป๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ํ, ๋ณธ ๋ฆฌํฉํฐ๋ง์์ ์ฌ์ฉ๋ Clean Swift
๋ ์ค๋ฆฌ์ง๋์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ์ฌ ์ํฐ๋๋ฉ
์์ 2020๋
๋ถํฐ ์ฌ์ฉ๋๊ณ ์๋ ํจํด์
๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋ฒ ํ๋ก์ ํธ์ ๋ง๊ฒ Clean Architecture
๊ด์ ์์ ๋ณํํ๊ณ ๊ฐํํ์์ต๋๋ค. ์ด ํจํด์ ์ฌ์ฉ์ ํ์พํ ํ๋ฝํด์ฃผ์ ์ํฐ๋๋ฉ
iOS ํ์๋ ์ด ์๋ฆฌ๋ฅผ ๋น๋ ค ๊ฐ์ฌ์ ๋ง์์ ์ ํฉ๋๋ค.
๋ค์ ์ด์ผ๊ธฐ
์ด๋ฒ ๊ธ์์๋ ๊ตฌ์กฐ ๊ฐ์ ๊ณผ ํ ์คํธ ๊ธฐ๋ฐ ๋ฆฌํฉํฐ๋ง์ ์ค์ฌ์ผ๋ก ์ ์ฒด์ ์ธ ํ๋ฆ๊ณผ ์ ๊ทผ ๋ฐฉ์์ ๊ณต์ ํ์ต๋๋ค.
๋ค์ ๊ธ์์๋ ์ค์ ์ฝ๋์ ๊ตฌ์ฒด์ ์ธ ์์๋ฅผ ํจ๊ป ์๊ฐํ์ฌ, ๋์ฑ ์ง๊ด์ ์ผ๋ก ๋ฆฌํฉํฐ๋ง ๋ฐฉ์๊ณผ ํจํด์ ์ดํดํ ์ ์๋๋ก ๋์๋๋ฆฌ๊ณ ์ ํฉ๋๋ค.
๋ํ, ๋ฆฌํฉํฐ๋ง ๊ณผ์ ์์ ๋ง์ฃผํ๋ ํ์ค์ ์ธ ์ด๋ ค์๊ณผ ์ํ์ฐฉ์ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ก๋ถํฐ ์ป์ ์ธ์ฌ์ดํธ์ ๊ฐ์ ๋ฐฉํฅ๋ ํจ๊ป ๋๋๋ ค ํฉ๋๋ค. ๊ธฐ์ ์ ์ธ ๊ณ ๋ฏผ๋ฟ๋ง ์๋๋ผ ํ์ ๋ฐฉ์, ์ผ์ ์ ์ฝ, ์ฐ์ ์์ ๊ฒฐ์ ๋ฑ ์ค๋ฌด์ ์ธ ๋งฅ๋ฝ๊น์ง ํจ๊ป ์ง์ด๋ณผ ์์ ์ ๋๋ค.
ํจ๊ปํ ๋๋ฃ๋ฅผ ์ฐพ๊ณ ์์ด์
fromm
iOS ํ์ ํจ๊ป ์ฑ์ฅํ๋ฉฐ ์๋น์ค๋ฅผ ๋ง๋ค์ด๊ฐ iOS ๋ค์ดํฐ๋ธ ๊ฐ๋ฐ์๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค.
์ฌ์ฉ์ ๊ฒฝํ์ ๊ณ ๋ฏผํ๊ณ , ๋ ๋์ ์ฝ๋๋ฅผ ํจ๊ป ๋ง๋ค์ด๊ฐ๋ ๊ณผ์ ์ ๊ด์ฌ ์๋ ๋ถ๋ค์ ๋ง์ ์ง์์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
๐ ๊ด๋ จ ํฌ์ง์ ๋ฐ ์ง์ ๋ฐฉ๋ฒ์ ์ฑ์ฉ ํ์ด์ง ๋งํฌ๋ฅผ ํ์ธํด์ฃผ์ธ์.