์ฃผ์ฐจ | ๋ด์ฉ | ์ธ๋ฏธ๋ | PR | ์ฐธ๊ณ |
---|---|---|---|---|
1์ฃผ์ฐจ |
iOS ๊ฐ๋ฐ ์ ๋ฌธ : Xcode ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, Layout ๊ธฐ์ด, View ํ๋ฉด ์ ํ | โ | โ | |
2์ฃผ์ฐจ |
UI ์ค๊ณ ๊ธฐ์ด(1) : AutoLayout, StackView, TabBarController | โ | โ | |
3์ฃผ์ฐจ |
UI ์ค๊ณ ๊ธฐ์ด(2) : ScrollView, TableView, CollectionView | โ | โ | |
4์ฃผ์ฐจ |
์๋ฒ ํต์ ๊ธฐ์ด: ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ดํด, RESTful API, Alamofire๋ฅผ ํ์ฉํ ์ค์ต | โ | โ | ๐ |
5์ฃผ์ฐจ |
ํด๋ผ์ด์ธํธ ยท ๋์์ธ ํฉ๋ ์ธ๋ฏธ๋ | โ | โ | ๐ |
6์ฃผ์ฐจ |
ํด๋ผ์ด์ธํธ ยท ์๋ฒ ํฉ๋ ์ธ๋ฏธ๋ | โ | โ | ๐ |
7์ฃผ์ฐจ |
์๋ฒ ํต์ ๋ฐ ๋ฐ์ดํฐ ์ ๋ฌ ์ฌํ : ์๋ฒ ํต์ ์ถ๊ฐ ์ค์ต | โ | โ | |
8์ฃผ์ฐจ |
์ฑ์ผ์ ์ํ ํ๋ก์ ํธ ๊ธฐ์ด ์ธํ ๋ฐ ๊ทธ ์ธ ๊ฟํ ์๊ฐ |
- MVVM + RxSwift ์ฐ์ต
- POP ์ฐ์ต
- Coordinator ์ฌ์ฉ
- Moya ์ธํ : BaseTarget + BaseService
- Custom UI Component ๋ถ๋ฆฌ
- ํด๋๋ง ์์ฑํด๊ฐ๊ธฐ
1~4์ฐจ ๊ณผ์ ์์๋ ์ธ์คํ๊ทธ๋จ ํด๋ก ์ฝ๋ฉ์ ํตํด ๊ธฐ์ด UI ์์ ๋ฐ ๊ฐ๋จํ API ์ฐ๊ฒฐ ์์ ์ ์งํํ๋ค. ๊ฑฐ์ ๋ชจ๋ ๋ถ๋ถ์ด ์ด๋ฏธ ๊ตฌํํ ์ ์์๋ ๋ถ๋ถ์ด์๊ธฐ์, ๊ตฌํ ์์ฒด๋ณด๋ค๋ ํจ์จ์ฑ ๋ฐ ์๋ก์ด ๊ธฐ์ ์ต๋์ ๋ชฉํ๋ฅผ ๋์๋ค. OB๋ก์ iOS ํํธ ๊ณผ์ ๋ฅผ ๋ ๋ฒ์งธ๋ก ํ๋ ๊ฒ์ด๊ธฐ์ ๋ฃจ์ฆํด์ง์ง ์๊ณ ๋ง์ ๋ด์ฉ์ ์ป์ด๊ฐ ์ ์๋๋ก ์ต๋ํ ๋ชฉํ๋ฅผ ๋๊ฒ ์ก์๋ค.
์ด๋ ๊ฒ ์ก์ ๋ชฉํ๋ค์ 1์ฃผ์ฐจ ์ธ๋ฏธ๋๋ถํฐ ReadMe์ ์ ์ด ๋์๊ณ , ํญ์ ๋ถ์กฑํ ๋ถ๋ถ๊ณผ ๋ชฉํ๋ฅผ ์๊ธฐ์ํฌ ์ ์๋๋ก ํ๋ค. ๊ฐ๊ฐ์ ๋ชฉํ๋ค์ ๋ํ ์ฑ์ทจ๋๋ฅผ ์ค์ค๋ก ํ๊ฐํ๋ฉฐ ์ด๋ ค์ ๋ ๋ด์ฉ, ์ด์๋ฅผ ํด๊ฒฐํ๋ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ค ํ๋ค.
1. MVVM + RxSwift ์ฐ์ต
์ฒ์์ ์๊ณ ์๋ ์์ค์ MVVM์ ๊ฐ๋ ๊ณผ ํจ์จ์ ์ธ ์ํคํ ์ณ์ ํ์์ฑ ์ ๋๋ก ์กฐ๊ธ ์ถ์์ ์ธ ๋ด์ฉ์ ๊ธฐ๋์ด ๋๋ฃจ๋ญ์คํ๊ฒ ์๊ณ ์์๋ค. MVVM์ด ๋ฌด์์ธ์ง๋ ์ค๋ช ํ ์ ์์ง๋ง, ์ด๋ป๊ฒ ๊ตฌํํ๊ณ ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ ๋์์ด ๋๋์ง์ ๋ํด์ ํ์ธ์๊ฒ ์ค๋ช ์ ํด๋ณด๋ผ๊ณ ํ๋ฉด ๋ง๋งํด์ง๋ ์์ค์ด์๋ค. ๊ทธ๋๋ง MVVM์ ์คํฐ๋๋ฅผ ํ๋ฉด์ ์กฐ๊ธ ์น์ํด์ก์ง๋ง, MVVM์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ ๋ด๋นํ๋ RxSwift์ ๋ํด์๋ ์ ํ ์๋ ๋ถ๋ถ์ด ์์๋ค. ํ๊ธฐ ์ด๋ผ ์๊ฐ์ด ๋ง์ด ๋จ์๋ ๋งํผ ๋ฐ๋น ์ง๊ธฐ ์ ์ RxSwift์ ๋ํด์ ๋น ๋ฅด๊ฒ ๊ณต๋ถํ๊ณ ๋์ด๊ฐ์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ , ์กฐ๊ธ์ฉ ๊ณต๋ถํด๊ฐ๋ฉฐ ๋ฏธ๋ ์ธ์ ์ค๋น๋ ํ๋ค. ์ธ์ ์ค๋น๋ฅผ ํ๋ฉด์ ์๋ชป๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ๋ ์ด์ฌํ ๊ณต๋ถํ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
Rx ์คํฐ๋๋ฅผ ํ๋ฉด์ ์ ๋ฐ์ ์ธ RxSwift์ ๋ํ ์ดํด๋๊ฐ ์ด๋ฐ์ ๋นํ ๊ฒ ์์ด ๋์์ก์ผ๋, Rx๋ฅผ ํตํ ์๋ฒํต์ ์ด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๋ํ ๋ถ๋ถ์ ์์ง๊น์ง ํฌ๊ฒ ์ ์ฉํจ์ ๋๋ผ์ง ๋ชปํ๊ณ ์๋ค. ์ถ๊ฐ๋ก 3์ฐจ ๊ณผ์ ์์ RxCocoa๋ฅผ ์ด์ฉํ TableView๋ฅผ ๊ตฌ์ฑํด ๋ณด์๋๋ฐ ์น์ ์ ์ฌ์ฉํ๊ธฐ ์ํด RxDataSource๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ Delegate๋ก๋ Proxy๋ฅผ ๊ตฌํํด์ผ ํ๋ ๋ถ๋ถ ๋๋ฌธ์, ์๋ฌด๋๋ DiffableDataSource์ CompositionalLayout์ ์ ์ฐ๋ ๊ฒ์ด ๋ ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๋ค. ๋ํ Prepare ๋ฉ์๋๋ก ์ธํด์ DisposeBag์ด ์๊พธ ์ด๊ธฐํ๋๋ ๋ฌธ์ ๊ฐ ์์๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ํด์๋ ๋ทฐ์ปจํธ๋กค๋ฌ์ DisposeBag์ ๋๋์ง, ์ ์์ DisposeBag์ ๋๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค๋ ์ ์ ์๊ฒ ๋์๋ค.
RxSwift ๊ธฐ๋ณธ 1ํธ : Observable, Observer, Subject
2. POP ์ฐ์ต
POP, Protocol-Oriented-Programming๋ ์ฌ์ค ์ฒ์์๋ ๋ฌด์จ ๋ง์ธ์ง๋ ์ ๋๋ก ๋ชจ๋ฅด๋ฉด์ ์์๋ณด์๋ ๋๋์ผ๋ก ๋ชฉํ์ ์ ์ด ๋์๋ค. ๋ง์ฐํ ๋ชจ๋ฅด๋ ๊ฐ๋ ์ ๋ํด์ ์๊ณ ์ถ๋ค๊ณ ์๊ฐํ ์ด์ ๋, GitHub์์ iOS ๊ณ ์๋๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํ๋กํ ์ฝ์ ์ ๋ง ๋ฅ์ํ๊ฒ ๋ค๋ฃฌ๋ค๋ ๋๋์ด ๋ค์๊ณ , ์ด๊ธฐ์ ํ์ฐฝ ๊ด์ฌ์์ด ํ๋ ์ํคํ ์ณ์์๋ ๊ฒฐ๊ตญ Protocol์ ๊ต์ฅํ ์ค์ํ๋ค. POP๋ ์ธ๋ฏธ๋ ๊ณผ์ ๋ฅผ ํ๋ฉด์, Rx ์คํฐ๋ & ์ํคํ ์ณ ๋ฐ ๋์์ธํจํด ์คํฐ๋๋ฅผ ํ๋ฉด์ ์กฐ๊ธ์ฉ ๊ฐ์ด ์กํ๋ค. ์์ง ๋ฅ์ํ ์ฌ์ฉ์ ๋ฉ์์ง๋ง ์ ์ด๋ ์ Protocol์ด ์ค์ํ์ง์ ๋ํด์๋ ๊ฐ์ ์ก์ ์ ์์๋ค. ์ถ๊ฐ์ ์ผ๋ก ์ด๋ฒ ํ๊ธฐ์ Java ์์ ์ ๋ค์ผ๋ฉด์ Interface์ Abstract Class๋ฅผ ํตํ ๋์์ธ ํจํด์ ๊ตฌํํ๋ ๋ถ๋ถ์ ๋ํด์๋ ์ข ํฉ์ ์ผ๋ก ๋ฐ๋ผ๋ณผ ์ ์์ด์ ์ดํด์ ์กฐ๊ธ ๋์์ด ๋์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ํ๋กํ ์ฝ์, ๋ชจ๋ ๊ฐ ์์กด์ฑ์ ๋ฎ์ถฐ์ฃผ๊ณ (์ ๋ ํ ์คํ ์ด ์ฌ์์ง) ํน์ ํด๋์ค์ ๋ํ ์ฒญ์ฌ์ง์ ์ ๊ณตํ๋ฉฐ, ํ์ ์์๋ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ธฐ ํธํ๊ฒ ํ๋ค. ์ฒดํ๋์ง ์์ ๋งํผ ์์ผ๋ก๋ ๊พธ์คํ POP๋ฅผ ์ฐ์ตํ๋ ค๊ณ ํ๋ค.
3. Coordinator ์ฌ์ฉ
์์ฝ์ง๋ง ์์ง๊น์ง Coordinator๋ฅผ ์ ์ฉํด๋ณด์ง๋ ๋ชปํ๋ค. ์ด์ ๋ Coordinator๊ฐ ์ฌ๋์ ๋ฐ๋ผ ๋๋ฌด ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๊ณ , ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ Coordinator ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ์ผ์ด ๊ฝค๋ ๊ณ ๋ฏผ์ค๋ฌ์ ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋๋ Coordinator์ ๋ํ ์์ ๋ฅผ ๋ง์ด ๋ถ์ํด ๋ณด๊ณ , Factory์ ๊ฒฐํฉ๋ Coordinator๋ผ๋์ง, ํด๋ฆฐ ์ํคํ ์ณ๋ Rx์ ์ด๋ป๊ฒ ํจ๊ป ์ฐ์ด๋์ง์ ๋ํด ๊ณต๋ถํ๋ฉฐ ๋ค๋ฅธ ๊ฐ๋ ์ ๋ํ ์ดํด๋๋ฅผ ๋์ผ ์ ์์๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ Coordinator๋ฅผ ์ ์ํ๋ฉฐ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ฐธ์กฐ๋ฅผ ๋จ๊ธฐ๋, ๋จ๊ธฐ์ง ์๋์ ๋ฐ๋ผ ํ๋ฉด์ ํ์ด ๋๊ณ ์๋๊ณ ๊ฐ ๊ฒฐ์ ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋๋ฐ, ์ด๋ก ์ธํด VC ๊ฐ์ push, pop, present์ ๋ํด์ ๋ค์๊ธ ์ง์ด๋ณด๋ฉฐ VC์ ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ฐธ์กฐ ๊ด๊ณ์ ๋ํด์ ๊ณต๋ถํ๊ฒ ๋์๋ค. ๋ํ View Life Cycle๊ณผ View Drawing Cycle์ ๋ํด์๋ ๋ค์ ์ดํด๋ณด์๋ค.
Coordinator Pattern ๊ธฐ๋ณธ! With RayWanderlich Tutorial!
4. Moya ์ธํ : BaseTarget + BaseService
์ด ๋ถ๋ถ์ ์ด๊ธฐ ๋ชฉํ์ ๊ฐ์ฅ ๋ฌ๋ผ์ง ๋ถ๋ถ์ธ๋ฐ, Moya๊ฐ ์๋๋ผ Alamofire๋ฅผ BaseAPI์ BaseService๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ํํ๋ค. ์ด๊ธฐ์ Moya๋ฅผ ์ด์ฉํ๋ ค๊ณ ํ๋ ์ด์ ๋ ์ฑ์ผ์์ ๊ฐ์ฅ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์๋ฒํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Moya๋ผ๊ณ ์๊ฐํด์์๋๋ฐ, Spark ํ๋ก์ ํธ ์ค์ Moya๊ฐ ๋๋ฌด ๋ํ ๊ฒ Layering๋์ด ์๊ณ , URLSession์ ๋ํ ์๋ก ์ ์ธ ์ ๊ทผ ๋ฐ ์ดํด๋ฅผ ๋ง๋๋ค๊ณ ์๊ฐํ์ฌ ํ ์์ค ๋ฎ์ Alamofire๋ฅผ ์ฑํํ๊ฒ ๋์๋ค. Alamofire๋ฅผ ๋ชจ๋ํํ๋ฉด์ ๋๋ ์ ์, ํ์คํ ์๋ฒํต์ ์ ๋ํ ์ดํด๊ฐ URLSession -> Alamofire -> Moya ์์ผ๋ก ๊ฐ์ผ Moya๋ ์ ์ธ ์ ์๊ฒ ๋ค๋ ์ ์ด๋ค. ์ด์ ๋ํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํด ๋์๋ค.
Alamofire๋ฅผ Moya์ฒ๋ผ ์ฌ์ฉํด๋ณด์! By Router Pattern (1ํธ - Foundation Setting)
Alamofire๋ฅผ Moya์ฒ๋ผ ์ฌ์ฉํด๋ณด์! By Router Pattern (2ํธ - Services, Routers ๊ตฌํ)
Alamofire๋ฅผ Moya์ฒ๋ผ ์ฌ์ฉํด๋ณด์! By Router Pattern (3ํธ - body, queryBody, requestPlain, Multipart ๊ตฌํ)
Alamofire๋ฅผ Moya์ฒ๋ผ ์ฌ์ฉํด๋ณด์! By Router Pattern (4ํธ - EventLogger๋ก ํต์ ๊ฒฐ๊ณผ ํ์ธํ๊ธฐ)
5. Custom UI Component
1, 2, 3์ฐจ ๊ณผ์ ์์ ๋ฐ๋ณต๋๋ UI๋ฅผ ์ฐพ์์ Custom Component Class๋ก ์ ์ํ๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ ๋ถ๋ถ์์๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋๊ฒ ๋ง๋๋ ์ ์ ๋์ค์ ํญ์ ์ด์ ์ผ๋ก ์์ฉํ๋ ๊ฒ ๊ฐ๋ค. 3์ฐจ ๊ณผ์ ์์๋ Builder Pattern์ผ๋ก ์ํ๋ Actions์ ๋ฐ์์ Closure์ ์ ์ฅํ๊ณ ์ด๋ฅผ ๋ฒํผ์ ๋ถ์ฌํ๋ Custom Navigation Bar๋ฅผ ์ ์ํ๋ค. ๋ํ ๋ชจ๋ Component๋ฅผ ์์ฑํ ๋ SOLID ์์น์ ๋ง๊ฒ ์์ฑํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
6. ํด๋๋ง ์์ฑ
์ด ๋ถ๋ถ์ 1-4์ฐจ ๊ณผ์ ๋ฅผ ํ๋ฉด์๋ ๋ฌผ๋ก ์ด๊ณ , ํฉ๋์ธ๋ฏธ๋๋ฅผ ์งํํ๋ฉฐ ์กฐ๊ธ์ด๋๋ง ๋ชฉํ๋ฅผ ๋ฌ์ฑํ ์ ์์๋ค. ์ํคํ ์ณ, ํ์ , ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ํด๋๋ง์ ํ๋๋ฐ, ์์ง ๋ค๋ฌ์ ๋ถ๋ถ์ด ๋ง๋ค. ์ ์ฉํ Extension์ ์ ๋ฆฌํ๊ณ , ๋ค๋ฅธ ์ฌ๋๋ค์ ํด๋๋ง์ ๋ณด๋ฉฐ ์ ์ด๋ ๊ฒ ๋ง๋ค์์์ง ๊ณ ๋ฏผํ๊ณ , ๊ฐ๊ฐ์ ๋ค๋ฅธ ์ํคํ ์ณ๋ฅผ ๊ฐ์ง ํ๋ก์ ํธ๋ค์ด ์ด๋ค ํด๋๋ง์ ์ฑํํ๋์ง์ ๋ํด ๊ณต๋ถํ๋ฉฐ ํด๋๋ง์ ์์ฑํด ๋๊ฐ๋ค.
Xcode Project์ ๋ํ ์๋ก ์ ์ธ ์ดํด
์ด๋ฒ ํฉ๋์ธ๋ฏธ๋๋ฅผ ์งํํ๋ฉฐ ๊ตฌ์ํด ๋์ ํด๋๋ง์ ์ํํ๊ณ , ์ฒ์์ผ๋ก ํ์ ์ ์ํ ํ๋ก์ ํธ๋ฅผ ์ธํ ํด ๋ณด์๋ค. ์๊ฐ๋ณด๋ค ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ๋๋ฌด ๋ง์๊ณ , Git์์๋ ๋ช ๋ฒ ๊ท์ฐฎ์ ์ถฉ๋์ด ๋์ ์ด์ฌํ ๊ตฌ๊ธ๋งํด์ ํด๊ฒฐํ๋ค. ์ด ๊ณผ์ ์์ ๋๋ ์ ์ Xcode Project์ ๋ํ ์๋ก ์ ์ธ ์ดํด๊ฐ ๋ง์ด ๋ถ์กฑํ๋ค๋ ์ ์ด๋ค. UI๋ฅผ ์ง๊ณ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ผ์ ์ด๋ป๊ฒ ํด์๋ ํด๊ฒฐํ ์ ์์ง๋ง, ์ด ํ๋ก์ ํธ๊ฐ ์ด๋ป๊ฒ ์ปดํ์ผ๋๊ณ , ๋น๋๋๊ณ , ์คํ๋๋ฉฐ, OS์ ๋ํด ๊ด๋ฆฌ๋๋์ง์ ๋ํ ๊ธฐ์ด์ ์ธ ์ดํด๊ฐ ๋ถ์กฑํ๋ค. ๋ํ ํ๋ก์ ํธ ์ธํ ์์ ๊ด๋ฆฌํ ์ ์๋ ๋ถ๋ถ์ด ๋งค์ฐ ๋ง๊ณ (info.plist๋ buidl setting๊ณผ ๊ฐ์ ๋ถ๋ถ), ๋ค๋ฅธ ์ธ์ด์ ๋ค๋ฅด๊ฒ xcodeproj๋ผ๋ ํ์ผ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ๋ค์ ๋ฅ์ํ๊ฒ ๋์ฒํ ์ ์์ด์ผ ํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ํ์ ์์๋ ์ด๋ฌํ ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด Tuist์ ๊ฐ์ ํ๋ก์ ํธ ๊ด๋ฆฌ ํด์ ์ด๋ค๊ณ ํ๋๋ฐ, ์ด๋ฌํ ํด๋ ๊ฒฐ๊ตญ์๋ Xcode์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๊ฐ ๋ท๋ฐ์นจ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ์ผ ์ ์ ์๊ฐ์ ๋ด์ ๊ณต๋ถํ๋ ค๊ณ ํ๋ค.
์ ์ ํ ์ํคํ ์ณ๋? ํ์ ์ ์ํ ํด๋๋ง์ด๋?(ํฉ๋์ธ๋ฏธ๋ ๊ณผ์ ์์ ๋ฐ์ท)
์ํคํ ์ณ์ ํด๋๋ง์ ๋ํด ๋ค์ ๊ณ ๋ฏผํ๊ฒ ๋์๋ค. ์๋ฒฝํ ์ํคํ ์ณ๋ ์๊ณ , ์ ์ ํ ์ํคํ ์ณ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ ๋งคํ๊ฒ ์๊ณ ์๋ ์ง์๋ณด๋ค๋ ์ค์ ์์ ํจ์จ์ ์ฌ๋ ค์ค ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ฑํํด์ผ ํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ณง ์์ผ๋ฉด ์ฑ์ผ์ธ๋ฐ, ์ํคํ ์ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ธ์ ์ธ ์์ฌ์ด ์๋์ง, ๊ทธ๊ฒ์ด ์๋๊ฒ ๋๋ ค๋ฉด ์ด๋ป๊ฒ ํ์ ์ ์งํํด์ผ ํ๋์ง ์๊ฐํด๋ณด์. ์ฌ์ค ํ๋ก์ ํธ ์ธํ ์ ๊ดํด์ ์ค๋ช ํด์ค์ผ ํ ๊ฒ๋ค์ด ๊ฝค ์๋๋ฐ ์ด๋ฒ ํ์ ์์๋ ํ์๋ค์๊ฒ ๋ง์ ์ค๋ช ์ ํด์ฃผ์ง ๋ชปํ๋ค. ์ฑ์ผ๋๋ ํ๋ํ๋ ์๋ ค์ฃผ๊ณ ์์ํ ๊ฒ์ด๊ณ , ์ค๋นํ ์ํคํ ์ณ๋ ๊ตฌ์กฐ์ ๋ง๋ ๋ฐฉ์์ผ๋ก ํ์ ์ด ์งํ๋ ์ ์๋๋ก ํ์๋ค์๊ฒ ๊ทธ ์๋ฏธ๋ฅผ ์ ๋ฌํ ์ ์์ด์ผ ํ ๊ฒ์ด๋ค.
Compositional Layout
๋น๊ทผ๋ง์ผ์ด ๋ ๋ฒ์งธ ํด๋ก ์ฝ๋ฉ์ด๊ธฐ๋ ํ๊ณ , ํ์์ ๊ถ๊ธํ๋ CompositionalLayout์ผ๋ก ๋ทฐ๋ฅผ ๊ตฌํํด ๋ณด์๋ค. CompositionalLayout๋ CollectionViewLayout์ ์ปค์คํ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ์ ์ต์ํด์ง๋ฉด ๋ ์ ์ธ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ด๋ค ๋ถ๋ถ์ด๋ ๊ธฐ์ด๋ถํฐ ์ถฉ์คํ์.
[UIKit] CompositionalLayout์ผ๋ก ๋น๊ทผ๋ง์ผ ๊ฒ์๊ธ ์์ธ๋ณด๊ธฐ ๋ทฐ ๊ตฌํํ๊ธฐ
- ํ๋ก์ ํธ์ ๋ํ ์๋ก ์ ์ธ ์ดํด + Tuist๋ฅผ ํตํ ํ๋ก์ ํธ ๊ด๋ฆฌ
- Git์ ๋ํ ์ดํด : ๋ค๋ฅธ ์ฌ๋์ ๋ฌธ์ ๋ ํธํ๊ฒ ํด๊ฒฐํด์ค ์ ์๋๋ก
- Clean Architecture : Presentation ๋ง๊ณ Data Layer์ ๋ํด์ ๋ ๊ณต๋ถ
- UNIT Test : ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๊ณต๋ถ ์ดํ RxTest๊น์ง
- CI-CD : ์ฒด๊ณ์ ์ธ ํ๋ก์ ํธ ๊ด๋ฆฌ๋ฅผ ์ํด
- Combine : ๊ฐ๋ ์๊ณ ์ฝ๋ ๋ฆฌ๋ฉ ์ ๋๋ ๊ฐ๋ฅํ๋๋ก
- SwiftUI : ์ต๊ทผ์ Medium์ด๋ RayWenderlchi๋ฅผ ๋ณด๋ฉด ๊ฑฐ์ SwiftUI์ ๋ํ ๊ฐ์์. ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์์งํ์.
- ๊ธฐ์
- Share Extension
- Naver Map & Kakao Map
- WebView
- Animation : ์ ๋๋ฉ์ด์ ์ ๋ถ์ฌํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ๊ฐ๊ฐ์ ๋ํด ์ฐจ์ด์ ์ ์ค๋ช ํ ์ ์๋๋ก ๊ณต๋ถํ๊ธฐ