๋ผ์ด์จํํธ๋ โ์ฌ์์ ์ฉ๊ธฐโ๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ์ด๋ ์ฒ์์ผ๋ก ์๋น ๊ฐ ๋ ์ด๋ฅธ๋ค์ด ๊ฐํ๊ณ ๋๋ํ ๋ถ๋ชจ๊ฐ ๋ ์ ์๋๋ก,
์ธ์์์ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- 2023.11 ~ 2021.12 3์ฐจ ๋ฆฌํฉํฐ๋ง (Unit test ์ ์ฉ)
- 2023.10 ~ 2021.11 2์ฐจ ๋ฆฌํฉํฐ๋ง (MVC-C -> MVVM-C(+Combine))
- 2023.08 ~ 2023.10 1์ฐจ ๋ฆฌํฉํฐ๋ง(MVC -> MVC-C)
- 2023.06 ~ 2023.07 UI ์ค๊ณ ๋ฐ ๊ตฌํ(1์ฐจ ํ๋ก์ ํธ)
ffalswo2 | kimscastle | cchanmi |
Test ์ ์ฉ ๋์๋ค ๊ฐ๊ฐ ์ปค๋ฒ๋ฆฌ์ง 70% ์ด์
- URLSessionStub๋ฅผ ์ด์ฉํด์ ์ค์ ๋คํธ์ํฌ ํต์ ์์ด API ํธ์ถ ๋ก์ง ๊ฒ์ฆํ์ต๋๋ค.
- [TEST] API Unit Test ๊ด๋ จ ํ์ผ๋ค ์ถ๊ฐ (#195)
-
NavigationDummy
- ViewModel์์ Coordinator๋ก ์ฌ๋ฐ๋ฅธ flow type์ ์ ๋ฌํ๋ ๊ฒ ๊น์ง๋ง ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ๋๋ฌธ์, ViewModel์ ํ์ํ ์์กด์ฑ ๊ฐ์ฒด์ ์๋ฆฌ๋ง ์ฑ์์ฃผ๋ ์ฉ๋๋ก Dummy๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
-
ManagerStub
- URLSessionStub๋ฅผ ํ์ฉํด ManagerLayer์ ๋ก์ง ๊ฒ์ฆ์ด ์๋ฃ๋ ์ํ์ด๊ธฐ๋๋ฌธ์ ManagerStub๋ฅผ ํ์ฉํด ViewModel Layer์ ๋ก์ง์ ๊ฒ์ฆํ์ต๋๋ค.
-
๊ด๋ จ PR (๋ณ๊ฒฝ ์ด์ ViewController Test ํฌํจ)
-
ViewModelSpy
- ViewModel Layer์ unit test๋ฅผ ํตํด์ ๊ฒ์ฆ๋๋ก์ง์
input์ ๋ฐ๋ฅธ ์ฌ๋ฐ๋ฅธ ๊ฐ์ด output์ผ๋ก ๋ฐํ๋๋๊ฐ
์๊ธฐ๋๋ฌธ์ ๋จ์ํ ViewController์์ ๋๊ธฐ์ ์ผ๋ก ํน์ Data๊ฐ ๋ค์ด์๋ค๊ณ ๊ฐ์ ํ๊ณ unit test๋ฅผ ์งํํ๋ ค ํ์ต๋๋ค. - ํ์ง๋ง viewModel์ output์ด ViewController๋ก ์ํ๋ ์์ ์ ์ ๋ค์ด์ ๋ฐ์ ๋์๋์ง๋ฅผ ๊ฒ์ฆํด์ผ ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํด, viewModel์ output์ด viewController๋ก ์ ๋ค์ด์ค๋์ง ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๊ฐ UI ์ปดํฌ๋ํธ๋ค์ ์ ์ ์ฉ์ด ๋์๋์ง๋ฅผ ๋น๋๊ธฐ ํ ์คํธํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
- ViewModel Layer์ unit test๋ฅผ ํตํด์ ๊ฒ์ฆ๋๋ก์ง์
-
๊ด๋ จ PR
ViewController๋ event์ ViewModel์ ์ ๋ฌํด์ฃผ๊ณ , Output์ ํตํด ๊ฐ์ด ๋ณํ๋ฉด UI์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ์ ํ๋ ์ฑ
์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ViewModel์ด โViewController๊ฐ ์ ๋ฌํ ์ด๋ฒคํธโ๋ฅผ ์ ๋๋ก ์์ ํ๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ํ์ ๊ฒ์ฆ์ด ํ์๋ก ํฉ๋๋ค.
์ถ๊ฐ๋ก, ๋ฏธ๋ฆฌ ์ง์ ํ Output์ ๋ณด๋์ผ๋ก์จ ViewController์ Output binding ๋์์ ๊ฒ์ฆํ๊ธฐ ์ํด ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐ์ต๋๋ค. ์ด๋ ์ํ ๊ฒ์ฆ์ ์ํฉ๋๋ค.
๋ฐ๋ผ์ โํ์โ์ โ์ํโ๋ฅผ ๋ชจ๋ ๊ฒ์ฆํ๊ธฐ์ ViewModel Spy๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
๊ธฐ์กด MVC-Cํจํด์์ ์์ ํ ๋ก์ง๋ถ๋ฆฌ๋ฅผ ์ํ MVVM-Cํจํด์ผ๋ก ๋ฆฌํฉํฐ๋ง, ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ฒฝ์ฐ์ combine์ ํ์ฉ
- ViewController์ชฝ์์ ๋ฐ๋ Publisher์ errortype์ ํญ์ Never type์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
UI๋ error๋ฅผ ์ํ์๊ฐ ์์ด ๋จ์ํ action์ผ๋ก ViewModel์ ๊ฐ๋ง ๋๊ฒจ์ฃผ๋ฉด๋๋ฉฐ, ViewController์์ completion์ ํด๋นํ๋ error๋ฅผ ๋ฐ๊ฒ๋๋ฉด stream์ด ๋์ด์ง๊ณ , ๋์ด์ง stream์์ ๋ณธ๋ ๋ฐ๊ณ ์ ํ๋ user input์ ํ๋ฉด์ ์ฌ์ง์ ํ์ง ์๋ ์ด์ ์ด๋ ํ ์์ฒญ๋ ๋ฐ์ง ๋ชปํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
- navigation์ ๊ด๋ฆฌํ๋ publisher๋ฅผ ViewModel๋ด๋ถ์์ ๊ตฌํํ๊ณ ํน์ input์๋ฐ๋ผ ํ๋ฉด์ ํ ํ์ ์ ๋๊ฒจ์ฃผ๊ณ navigation publisher๊ฐ ํ์ ์๋ฐ๋ผ ํ๋ฉด์ ํ๋ด๋น ๊ฐ์ฒด์ธ coordintor์ ๋ฉ์๋ ํธ์ถํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
DIP์ ๋ณธ์ง์ โ๋ณํํ์ง ์๋ ๊ฒ์ ์์กดํ๋ ๊ฒโ์ด๋ฉฐ โ์ถ์ํโ์ ์์กดํ๋ค๋ ๋ป์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ํ ๋๊ตฌ๋ก protocol์ ์ ๊ณตํฉ๋๋ค. UI์ ๊ฐ์ฅ๊ฐ๊น์ด ViewModel์ ๊ฒฝ์ฐ ๋ณํ์ ๋ฏผ๊ฐํ ์์๊ธฐ์, ViewModel protocol ๋ํ ๋ณํ์ ๋ฏผ๊ฐํฉ๋๋ค. ์ด๋ DIP์ ๋ณธ์ง์ ๋ง์ง ์์ต๋๋ค. ViewModel์ ๊ตฌ์ฒด ํ์ ์ ๋ฐ๋ผ๋ณด๋ ๊ตฌ์กฐ๋ ๊ณ ๋ ค๋ฅผ ํ์ง๋ง ํ์ฌ Input-Output๊ตฌ์กฐ๋ฅผ ์ฑํํ๊ณ ์์ผ๋ฉฐ Input, Output ๊ตฌ์กฐ์ฒด ํ์ ๊ณผ transform์ด๋ผ๋ ๋ฉ์๋๋ก ์ถ์ํ๋ protocol์ โ๋ณํ์ง ์๋ ๊ฒโ์ด๋ผ๊ณ ํ๋จํด ViewModel๋ํ DIP๋ฅผ ์ ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค
- ๋คํธ์ํน์ completion์ ํตํด ์์ stream์ ๋์ด์ง์ ๋ฐฉ์งํ๊ธฐ ์ํด flatmap operator๋ฅผ ์ฌ์ฉํ๊ณ , ๋ด๋ถ์ ์ผ๋ก๋ ๋น๋๊ธฐ ์ ์ผ๋ก stream์ ์์ฑํ๊ธฐ ์ํ future๋ฅผ ์ฌ์ฉํด์ async/await๊ณผ Combine์ ํผํฉํด์ ์ฌ์ฉํ์ต๋๋ค.
2. ๋คํธ์ํฌ ํต์ ์ ๋ฐ์ํ๋ error๋ฅผ combine์ catch operator๋ฅผ ํตํด์ ์ต์ข ์ ์ผ๋ก๋ error๋ฅผ never type์ผ๋กํ๋ stream์ผ๋ก ๋ฐ๊ฟ๋๋ค.
ํด๋น ๊ณผ์ ์ ํตํด catch๊ฐ ์์๋์ ์ฝ๋์ ๋ฌ๋ผ์ง์ ์ flaMap์ ํตํด returnํด์ฃผ๋ Publisher์ Error Type์ Never๋ก ๋ง๋ค์ด์ค ์ ์์ด 1๋ฒ ์์น์์์ UI๋ error๋ฅผ ์ํ์๊ฐ์๋ค ๋ผ๋ ์์น์ ์งํฌ ์ ์์ต๋๋ค.
ํด๋น ๋ฐฉ์์ด ์ ์๋ฏธํ ์ด์ ๋ ์ด๋ค error๊ฐ ๋ฐ์ํ์๋ UI/UX์ ์ธ ๊ด์ ์์ ์ ์ ์๊ฒ ๋ณด์ฌ์ค์์๋ ์ต์ํ์ UI๋ ๊ตฌ์ฑ์ ํด์ผํ๊ธฐ์ default๊ฐ์ ๋ฃ์ด์ค ์ ์ ๊ฐ ๋ณด๊ธฐ์๋ UI๊ฐ ๊นจ์ง์ง์์ view๋ฅผ ๋ณผ์์๊ณ , ๋ด๋ถ์ ์ผ๋ก error๋ฅผ handlingํด์ฃผ๋ stream์ ํตํด ์๋ฌ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ์ ์ ์ ์ฅ์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ ์ฌ์ค์ ๋ชจ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ค์์์ด ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ป์์ ์๊ฒ ๋ฉ๋๋ค.
3. ๊ธฐ์กด์ delegate pattern๋์ combine์ stream์ ํ์ฉํ data passing๋ฐฉ์์ผ๋ก ํต์ผํ์ต๋๋ค > cell ๋ด๋ถ์ button action์ ์ฒ๋ฆฌํ ๋ datasource๋ก ์ธํด ์์ฑ๋๋ data stream์ด ๋์ ๋๋ ๋ฌธ์ ์ cell๋ด๋ถ์์ data stream์ด ์์ฑ๋๋ ๋ฌธ์ ๋ฅผ prepareForReuse์ stream์ ์ ์ฅํ๋ ์์น๋ฅผ ์กฐ์ ํจ์ผ๋ก์จ ํด๊ฒฐํฉ๋๋ค. - [[REFACTOR] CurriculumView Diffable ๋ฐ MVVM(Combine)-C๋ก ๋ฆฌํฉํฐ๋ง (#179)](#187)
- ํด๋น ์ฑ์์๋ ๋ฐ์ดํฐ์ ๋ณํ์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์ ์ด ํ์ํ ์ํฉ์ด ์กด์ฌํ๊ณ ํด๋น ๊ฒฝ์ฐ์ Snapshot์ ํ์ฉํด UI/UX์ ์ผ๋ก ๋ณด๋ค ๋์ ๊ฒฝํ์ ์ ๊ณตํด์ฃผ๋ DiffableDataSource๋ฅผ ํ์ฉํด ๋ณด๋ค ๋ ๋์ ์ ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ ๋ฐฉํฅ์ผ๋ก ๋ฆฌํฉํฐ๋งํ์ต๋๋ค.
- [REFACTOR] LoginViewController MVVM-C๋ก ๋ณ๊ฒฝ (#162)
- [REFACTOR] Auth๊ด๋ จ VC๋ค MVVM(Combine)-C์ผ๋ก ๋ณ๊ฒฝ (#164)
๊ธฐ์กด MVC ํจํด์์ ViewController์ ์ฑ ์์ ๋ถ๋ฆฌํ๊ธฐ ์ํ ์ฌ๋ฌ๊ฐ์ง ๋์์ธํจํด ๋ฐ ๊ตฌ์กฐ ์ ์ฉ
1. ๊ธฐ์กด ๋คํธ์ํฌ ๋ ์ด์ด๋ฅผ singleton์์ ์์กด์ฑ์ฃผ์ ๋ฐฉ์(Dependency Injectcion)์ผ๋ก ๋ณ๊ฒฝ
์ถํ์ Unit Test ๋์ ์ ๊ณ ๋ คํ์ฌ ์์ง๋๋ ๋๊ณ ๊ฒฐํฉ๋๋ ๋ฎ์ ๊ฐ์ฒด ์ค๊ณ๋ฅผ ๋ชฉํ๋ก ์ค๊ณ์ ์ํ์ต๋๋ค. ๊ธฐ์กด์ ์ฑ๊ธํค ๋ฐฉ์์ SRP ์์น๊ณผ OCP ์์น์ ์๋ฐ๋๊ณ ํน์ ๊ฐ์ ๋ํ ํ ์คํธ๋ฅผ ์งํํ๋๋ฐ ์ด๋ ค์์ด ์์ผ๋ฉฐ Data race์ ์ํ์ฑ ๋ํ ์กด์ฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด ์ฑ๊ธํค์์ Dependency Injection์ ํตํ ์์กด์ฑ ์ฃผ์ ๋ฐฉ์์ ๋์ ๋ฐ ์ ์ฉํ์ต๋๋ค.
- [REFACTOR] API ๋ ์ด์ด ๋ถ๋ฆฌ (#127)
- [REFACTOR] ๋ถ๋งํฌ ๋คํธ์ํฌ ๋ ์ด์ด ๋ถ๋ฆฌ(#129)
- [REFACTOR]์ ์ฒด DI์ ์ฉ(#131)
ํ ๋ด์์ ๋ฐ๋ณตํด์ ์ฐ์ด๋ UIComponent์ ๊ฒฝ์ฐ์ ๋ฐ๋ณต๋๋ ์ฝ๋๊ฐ ๋ง์์ง๋ ์ํฉ์ด ๋ฐ์ํด ๊ฐ๋ ์ฑ ์ธก๋ฉด์์ ํผ๋ก๋๊ฐ ๋๋ฌด ์ฌํด์ก์ต๋๋ค. ์์ฃผ ์ฐ์ด๋ Component๋ค์์ ๊ณตํต์ ์ผ๋ก ์ฐ์ด๋ ํ๋ผ๋ฏธํฐ๋ค์ ์ธ์๋ก ๋ฐ์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ผ์ด์จํํธ์ ๋์์ธ์์คํ ์ ๊ตฌ์ถํ๊ณ ์ ์ฉํ์ต๋๋ค.
ViewController๋ UI ๊ด๋ จ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์ ํ๋ฆ์ ์ฒ๋ฆฌํ๋๊ฒ์ ์ญํ ๋ฒ์(scope)๋ฅผ ๋ฒ์ด๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ํ, MVC์ ๋จ์ ์ธ ViewController์ ์ญํ ์ด ๋น๋ํด์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋ฉด์ ํ ์ฑ ์ ์ ๋ด์ ์ํ Coordintor Pattern์ ๋์ ๋ฐ ์ ์ฉํ์ต๋๋ค.
4. Coodinator ๊ฐ์ฒด ๋ด์์ ViewController ๊ฐ์ฒด ์์ฑ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ์ํ Factory Pattern ๋์
DI๋ก์ธํด ViewController ๊ฐ์ฒด ์์ฑ์ ์ธ๋ถ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ฃผ์ ์ ๋ถํธํจ์ด ๋ฐ์ํ์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Custom DI Container, Swinject, Factory Pattern ๊ฐ์ ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ก ์ ํตํ ๋ฌธ์ ํด๊ฒฐ์ ๊ณ ๋ฏผํ์ต๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก Factory Pattern์ด ๋ผ์ด์จํํธ ํ๋ก์ ํธ ๊ท๋ชจ์ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ์ ๋, ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ์๊ฐํด ๋์ ๋ฐ ์ ์ฉํ์ต๋๋ค.
- [REFACTOR] Factory Pattern๋์ (#149)
- [REFACTOR] ArticleCategory, Challenge, Bookmark Factory Pattern ์ ์ฉ(#143
- [REFACTOR] Curriculum, MyPage, Article Coordinator์ Factory Pattern ์ ์ฉ (#145)
- [REFACTOR] Auth, Splash, Today factory pattern ์ ์ฉ (#144)
5. ViewController์ Coordinator๊ฐ์ ์์ ํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ ๋ฐ ์บก์ํ๋ฅผ ์ํ Adaptor Pattern ๋์
Delegate ํจํด์ผ๋ก์ธํด Coordinator๊ฐ ViewController์์์ User Action์ ์ถ๋ก ํ ์ ์๊ฒ ๋์๊ณ ๋ฐ๋ผ์ ์์ ํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ฒ ๋์์ต๋๋ค. Coordinator๋ flow์ ๋ํ ์ฑ ์๋ง์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ๊ณ , Coordinator์ ViewController์ ์์ ํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ์ํด ๋ ๊ฐ์ง Interface๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ Adaptor Pattern์ ๋์ ๋ฐ ์ ์ฉํ์ต๋๋ค.
- [REFACTOR] Adaptor Pattern ๋์ (#153)
- [REFACTOR] today coordinator์ adaptor pattern ์ ์ฉ (#152)
- [REFACTOR] Splash, Auth, ArticleCategory Coordinator์ Adaptor Pattern์ ์ฉ(#156)
- [REFACTOR] Curriculum, Challenge, Bookmark Adaptor Pattern ์ ์ฉ (#155)
- [REFACTOR] My Page, Article Detail Coordinator์ Adaptor Pattern ์ ์ฉ (#159)
UI ์ค๊ณ ๋ฐ ๊ตฌํ(1์ฐจ ํ๋ก์ ํธ)
๊น๋ฏผ์ฌ | ๊น์์ฑ | ๊น๋ํ | ๊ณฝ์ฑ์ค | ํฉ์ฐฌ๋ฏธ |
ffalswo2 | kimscastle | BrickSky | sjk4618 | cchanmi |
ํ๋ก์ ํธ ์ค๊ณ ๋ก๊ทธ์ธ ์ ์ ํ๋ก์ฐ ์คํ๋์ ๋ทฐ ์ํฐํด ์์ธ๋ทฐ |
ํ๋ก์ ํธ ์ค๊ณ ์จ๋ณด๋ฉ ๋ฉ์ธ ๋ทฐ ๋์์ธ์์คํ |
ํ์ ๋ทฐ ์ฑ๋ฆฐ์ง ๋ทฐ |
์ปค๋ฆฌํ๋ผ ๋ทฐ ์ฃผ์ฐจ๋ณ ๋ฆฌ์คํธ ๋ทฐ |
๋ถ๋งํฌ ๋ทฐ ๋ง์ดํ์ด์ง ๋ทฐ |
Library | Tag | Tool |
---|---|---|
SnapKit | Layout | SPM |
Lottie | Splash, Animation | SPM |
FireBase | ํธ์์๋ฆผ | SPM |
KaKaoOpenSDK | ์์ ๋ก๊ทธ์ธ | SPM |
LionHeart-iOS
โโโ LionHeart-iOS
โย ย โโโ Application
โย ย โย ย โโโ AppDelegate.swift
โย ย โย ย โโโ Base.lproj
โย ย โย ย โย ย โโโ LaunchScreen.storyboard
โย ย โย ย โโโ SceneDelegate.swift
โย ย โโโ Global
โย ย โย ย โโโ Config.swift
โย ย โย ย โโโ Extensions
โย ย โย ย โย ย โโโ Encodable+.swift
โย ย โย ย โโโ Literals
โย ย โย ย โโโ Resources
โย ย โย ย โย ย โโโ Assets.xcassets
โย ย โย ย โย ย โโโ AccentColor.colorset
โย ย โย ย โย ย โย ย โโโ Contents.json
โย ย โย ย โย ย โโโ AppIcon.appiconset
โย ย โย ย โย ย โย ย โโโ Contents.json
โย ย โย ย โย ย โโโ Contents.json
โย ย โย ย โโโ UIComponents
โย ย โย ย โโโ Utils
โย ย โโโ GoogleService-Info.plist
โย ย โโโ LionHeart-iOSDebug.entitlements
โย ย โโโ Network
โย ย โย ย โโโ Base
โย ย โย ย โโโ BaseResponse.swift
โย ย โย ย โโโ HTTPHeaderField.swift
โย ย โโโ Scenes
โย ย โย ย โโโ Article
โย ย โย ย โย ย โโโ ArticleCategory
โย ย โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โย ย โโโ Views
โย ย โย ย โย ย โโโ ArticleDetail
โย ย โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โย ย โโโ Views
โย ย โย ย โย ย โโโ ArticleListByCategory
โย ย โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โย ย โโโ Views
โย ย โย ย โย ย โโโ ArticleListByWeek
โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โโโ Views
โย ย โย ย โโโ BookMark
โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โโโ Views
โย ย โย ย โโโ Curriculum
โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โโโ Views
โย ย โย ย โโโ Login
โย ย โย ย โโโ MyPage
โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โโโ Views
โย ย โย ย โโโ Onboarding
โย ย โย ย โย ย โโโ Cells
โย ย โย ย โย ย โโโ ViewControllers
โย ย โย ย โย ย โโโ Views
โย ย โย ย โโโ Splash
โย ย โย ย โโโ TabBar
โย ย โย ย โโโ Today
โย ย โย ย โโโ Cells
โย ย โย ย โโโ ViewControllers
โย ย โย ย โโโ Views
โย ย โโโ Settings
โย ย โย ย โโโ Configurations
โย ย โย ย โย ย โโโ Development.xcconfig
โย ย โย ย โโโ Info.plist
โย ย
๊น๋ฏผ์ฌ ํธ๋ฌ๋ธ ์ํ
๐จ
๊น์์ฑ ํธ๋ฌ๋ธ ์ํ
๐ฆ
๊ณฝ์ฑ์ค ํธ๋ฌ๋ธ ์ํ
๐ฆฆ
๊น๋ํ ํธ๋ฌํด ์ํ
๐
ํฉ์ฐฌ๋ฏธ ํธ๋ฌ๋ธ ์ํ
๐ง