Gundy์ ์์ธ์ ๋ฌธํํ์ฌ ์ ๋ณด ์ฑ์ ๋๋ค. ์์ธ๋ฌธํํฌํธ์์ ์ ๊ณตํ๋ ๋ฌธํํ์ฌ ์ ๋ณด ์คํ API๋ฅผ ํตํด ๋ฌธํ ํ์ฌ ์ ๋ณด๋ฅผ ํ ์ด๋ธ ํํ๋ก ์ ๊ณตํ๊ณ ์ํ๋ ์ ๋ณด๋ฅผ ์คํฌ๋ฉํ์ฌ CoreData์ ์ ์ฅํ๋ ์ฑ์ ๋๋ค.
MVVM, Clean Architecture, Core Data, Async/Await, URLSession, Delegate, NotificationCenter
๋ค์ํ ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํ์ฌ ํ์ฌ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ณ ์ํ๋ ํ์ฌ๋ฅผ ์คํฌ๋ฉํ๋ค.
- ํ ์๊ฐ
- Diagram
- ํด๋ ๊ตฌ์กฐ
- ํ์๋ผ์ธ
- ์คํ ํ๋ฉด
- ํธ๋ฌ๋ธ ์ํ ๋ฐ ๊ณ ๋ฏผํ ๋ถ๋ถ
- ์ฐธ๊ณ ์๋ฃ
Gundy |
---|
'์ค๋ ๋ญ ํ์ง?' ํ ๋ ๋ฐ๋ก ์ด ์ฑ! |
SeoulCulturalLife
โโโ AppDelegate
โโโ SceneDelegate
โโโ Resource
โ โโโ Info.plist
โโโ Utility
โ โโโ Extensions
โ โ โโโ DateFormatter+
โ โ โโโ UIButton+
โ โ โโโ UIImage+
โ โ โโโ UILabel+
โ โ โโโ UIStackView+
โ โโโ GlobalConstant
โโโ Entities
โ โโโ Category
โ โโโ Gu
โ โโโ Event
โโโ UseCases
โ โโโ UseCase
โ โโโ UseCaseDelegate
โ โโโ ListUseCase
โ โโโ ScrapUseCase
โโโ InterfaceAdapters
โ โโโ ViewModel
โ โ โโโ ViewModel
โ โ โโโ ListViewModel
โ โ โโโ ScrapViewModel
โ โโโ DataAdapter
โ โ โโโ DataAdapter
โ โ โโโ JSONDataAdapter
โ โ โโโ CoreDataAdapter
โ โโโ DTO
โ โ โโโ EventDTO
โ โ โโโ EventResponseDTO
โ โโโ CoreData
โ โโโ SeoulCulturalLife.xcdatamodeld
โ โโโ SeoulCulturalLife.xcdatamodel
โ โโโ contents
โโโ FrameworksAndDrivers
โโโ ViewController
โ โโโ EventsViewController
โ โโโ ListViewController
โ โโโ ScrapViewController
โ โโโ FilterViewController
โ โโโ DetailViewController
โ โโโ EventsTabBarController
โโโ View
โ โโโ ListCell
โ โโโ ScrapCell
โโโ NetworkManager
โ โโโ APIProvider
โ โโโ EventAPIProvider
โ โโโ NetworkingError
โ โโโ DataFetcher
โ โโโ NetworkManager
โโโ CoreDataManager
โโโ EntityManager
โโโ EventEntityManager
โโโ CoreDataManager
๊ฐ๋ฐ ๊ธฐ๊ฐ 2023๋ 9์ 25์ผ ~ 2023๋ 10์ 4์ผ
๋ ์ง | ์์ ๋ด์ฉ |
---|---|
9์ 25์ผ | Entities, UseCases ์์ |
9์ 26์ผ | ListViewModel ์์ |
9์ 27์ผ | ListViewController, FilterViewController ์์ |
9์ 28์ผ | ํํฐ์ UIMenu ์์ |
9์ 30์ผ | NetworkManager ์์ |
10์ 1์ผ | DetailViewController ์์ |
10์ 2์ผ | ScrapViewModel, ScrapViewController ์์ |
10์ 3์ผ | CoreDataManager, EventsTabBarController ์์ |
10์ 4์ผ | ์ปจ๋ฒค์ ์ ๋ฆฌ ๋ฐ ๋ฆฌ๋๋ฏธ ์์ฑ |
๋ฆฌ์คํธ | ํํฐ | ๋ฆฌํ๋ ์ |
---|---|---|
์คํฌ๋ฉ | ์ธ์คํฌ๋ฉ | ํ์ดํผ๋งํฌ |
---|---|---|
์กฐ๊ฑด ์ค์ ์ ์ํ ํํฐ ํ๋ฉด๊ณผ ๊ฒ์๊ฒฐ๊ณผ๋ฅผ ์กฐํํ๋ ํ๋ฉด๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ทฐ๋ชจ๋ธ์ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์ต๋๋ค. ์ด ๋ ๋ทฐ์ ๋ชจ๋ธ๊ฐ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ด๋ป๊ฒ ํด์ผ ์ข์์ง ๊ณ ๋ฏผ์ด์์ต๋๋ค. Delegate ํจํด์ผ๋ก ๋ฐ์ธ๋ฉ ํ ๊ฒฝ์ฐ ๋ทฐ์ ๋ทฐ๋ชจ๋ธ์ 1:1์ ์ฐ๊ฒฐ๋ง์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ ์ ํ์ง ์์์ต๋๋ค. ๋ํ ํด๋ก์ ๋ก ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ๋ฒ๋ ๋ฐฐ์ด ๋ฑ์ ํตํด ๋ทฐ ๋ณ๋ก ์ํ๋ ๋ฆฌ์ก์ ์ ์ถ๊ฐํ๋ค๋ฉด ๊ตฌํํ ์๋ ์๊ฒ ์ผ๋ ์ ๊ด๋ฆฌํ๊ธฐ๋ ์ด๋ ต๊ณ ๋นํจ์จ์ ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Notification ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค. 1:1๋ก ์ฐ๊ฒฐ๋ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ทฐ๊ฐ ๋ทฐ๋ชจ๋ธ์ ๊ณต์ ํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
UseCase, ViewModel, DataAdapter, EventsViewController, EntityManager ๋ฑ์ ๊ณตํต ํน์ฑ์ ์ ์ํ๊ฑฐ๋ ์๊ตฌํ๊ธฐ ์ํด ์์ฑํ ํ๋กํ ์ฝ ๋ฐ ์ถ์ํ ํด๋์ค์ ๋๋ค. ์ฒ์์๋ ๋ชจ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ณ ์ ๋ง์๋จน์๊ธฐ ๋๋ฌธ์ Class Diagram ๋ํ ํ๋กํ ์ฝ๊ณผ ์ค์ํ์ ์ผ๋ก ๊ตฌ๋ถํด ์์ฑํ์์ต๋๋ค.
ํ์ง๋ง ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ฑํด๋๊ฐ๋ค๋ณด๋ ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ๊ตฌํ๋ง์ผ๋ก๋ ์ค๋ณต ์ฝ๋๋ฅผ ์ ์ ํ ์ ๊ฑฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ํด๋์ค์ ์์์ฒด๊ณ์์๋ ์ฌ์ ์์ super ํธ์ถ์ ํตํด ๊ธฐ์กด ์ ์ ๋ถ๋ถ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์ ์ถ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๋๋ฐ, ํ๋กํ ์ฝ ๊ธฐ๋ณธ ๊ตฌํ์์๋ ๊ทธ๋ฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์๊ฐ ์์์ต๋๋ค. ์ฑ๋ฅ์ ์ผ๋ก๋ ํด๋์ค๋ณด๋ค ๊ตฌ์กฐ์ฒด๋ฅผ ํํจ์ด ์ ํจํ๊ฒ ์ง๋ง ๊ฒฐ๊ตญ ์ฝ๋๋ ์ฌ๋์ด ์ฝ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐํด ์ ์ฒด ์ฝ๋์ ๊ธธ์ด๊ฐ ์ค์ด๋๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ ์ข๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋๋ฌธ์ ๊ทธ๋ฌํ ๊ฒฝ์ฐ ViewModel๊ณผ ๊ฐ์ด ์ถ์ํ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์์ต๋๋ค.
๋ชฉ๋ก ํ๋ฉด๊ณผ ์คํฌ๋ฉ ํ๋ฉด ๋ชจ๋ UINavigationController์ UITabBarController๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ง๋ ์ต๋๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ ์ '์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ๊ณ์ธต ๊ตฌ์กฐ์ ์๋จ์ ์์นํด์ผ ํ๋๊ฐ'์์ต๋๋ค. ์ฒ์์๋ ํญ๋ฐ ์ปจํธ๋กค๋ฌ์ ๊ฐ ๋ทฐ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฐ๊ณ ์๋ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ค์ ๋ฃ์ด์ฃผ์์ต๋๋ค. ํ์ง๋ง ๋ฐ๋๋ก ์ต์์์ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ์๊ณ ๊ทธ ์๋์ ํญ๋ฐ์ ๋ทฐ์ปจํธ๋กค๋ฌ๋ค์ด ์๋ค๋ฉด ๋์ฑ ํจ์จ์ ์ธ ๊ตฌ์กฐ๊ฐ ๋จ์ ๊นจ๋ฌ์ ์์ ํ์์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ ํญ์ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ์ต์์์ฌ์ผ ํ๋๊ฐ? ์ด ์๋ฌธ์ ๋์ฑ ๊ณ ๋ฏผํด๋ณด๊ณ ๋ด๋ฆฐ ๊ฒฐ๋ก ์ '๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค๋ฅผ ๊ฒ์ด๋ค' ์ ๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ชจ๋ ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ฅผ ํ์๋ก ํ๊ณ , ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ์ pushํ๋ ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ๊ณ , ํญ๋ฐ๊ฐ ์ฌ๋ผ์ง๊ธธ ์ํ๊ธฐ ๋๋ฌธ์ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ์ต์์์ ์์นํ ๊ฒ์ด ์ ์ ํ์ต๋๋ค. ํ์ง๋ง pushํ์ฌ ๋ค์ด๊ฐ๋๋ผ๋ ํญ๋ฐ๊ฐ ์ ์ง๋๊ธธ ์ํ๋ค๊ฑฐ๋, ํญ๋ฐ์ ์์ดํ ์ค ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํ์ง ์์ ๋ทฐ์ปจํธ๋กค๋ฌ๋ค์ด ์๋ค๊ฑฐ๋ ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํญ๋ฐ๊ฐ ์ต์๋จ์ ์์นํ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ ํ์ต๋๋ค.