/iOS-Clean-Architecture-MVVM

Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoordinator, DTO, Response Caching and one of the views in SwiftUI

Primary LanguageSwift

[๐Ÿ‡ฐ๐Ÿ‡ท Korean ver.] Clean Architecture์™€ MVVM๋ฅผ ์‚ฌ์šฉํ•œ iOS ์•ฑ ํ…œํ”Œ๋ฆฟ

ํ•ด๋‹น iOS ํ”„๋กœ์ ํŠธ๋Š” Clean Layered Architecture์™€ MVVM ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค. ("Movie"๋ผ๋Š” ์•„์ดํ…œ ์ด๋ฆ„์œผ๋กœ ํ•ด๋‹น ํ…œํ”Œ๋ฆฟ์ด ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.) ์ž์„ธํ•œ ์ •๋ณด๋Š” ์ค‘๊ฐ„ ํฌ์ŠคํŠธ์—์„œ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค: Medium Post about Clean Architecture + MVVM.

Alt text

๊ณ„์ธต

  • ๋„๋ฉ”์ธ ๊ณ„์ธต = ๊ฐœ์ฒด (Entities) + ์œ ์Šค์ผ€์ด์Šค (Use Cases) + ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ€๋ถ„ (Repositories Interfaces)
  • ๋ฐ์ดํ„ฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ณ„์ธต: ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ตฌํ˜„ ๋ถ€๋ถ„ (Repositories Implementations) + API (๋„คํŠธ์›Œํฌ) + ์ง€์†๋˜๋Š” DB
  • ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต(MVVM): ๋ทฐ ๋ชจ๋ธ (View Models) + ๋ทฐ (Views)

์˜์กด ๋ฐฉํ–ฅ

Alt text

์ฃผ์˜: ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ๋‹ค๋ฅธ ๊ณ„์ธต์˜ ์š”์†Œ๋“ค์„ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค. (์˜ˆ์‹œ: Presentation - UIKit or SwiftUI or ๋ฐ์ดํ„ฐ ๊ณ„์ธต - Codable๋กœ ๋งคํ•‘)

์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฐœ๋…

ํฌํ•จ ์š”์†Œ

  • Unit Tests with Quick and Nimble, and View Unit tests with iOSSnapshotTestCase
  • Unit Tests for Use Cases(Domain Layer), ViewModels(Presentation Layer), NetworkService(Infrastructure Layer)
  • UI test with XCUITests
  • Size Classes and UIStackView in Detail view
  • Dark Mode
  • SwiftUI example, demostration that presentation layer does not change, only UI (at least Xcode 11 required)
  • Pagination

๋„คํŠธ์›Œํ‚น

๋งŒ์•ฝ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์žˆ๋Š” ํ•ด๋‹น ์˜ˆ์‹œ์—์„œ ๋„คํŠธ์›Œํ‚น์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ฐ”๋กœ๊ฐ€๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

ํ•„์ˆ˜ ์š”์†Œ

  • Xcode 11.2.1๋ฒ„์ „ ์ด์ƒ, swift 5.0 ๋ฒ„์ „ ์ด์ƒ

์‚ฌ์šฉ ์›๋ฆฌ

์˜ํ™”๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„  ์„œ์น˜๋ฐ”์— ์ด๋ฆ„์„ ์ ๊ณ  ์ฐพ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ์˜ํ™” ์š”์ฒญ๊ณผ poster image ์š”์ฒญ์˜ ๋‘๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์„ฑ๊ณต๋œ ๋ชจ๋“  ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ณด์กด๋œ๋‹ค.