๐Ÿค” Clean Architecture ๋ž€?

์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ๊ณ  ๋ณต์žกํ•˜๋‹ค. ์ด๋Ÿฐ ์•ฑ์„ ๊ฐœ๋ฐœ ํ• ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ง€์— ๊ณ ๋ฏผํ•˜๋ฉฐ ๋‚˜์˜จ ๊ฐœ๋…์ด Clean Architecture ์ด๋‹ค.

View๋Š” ๊ธฐ์กด์— ๊ณต๋ถ€ํ•˜์˜€๋˜ MVVMํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก, ViewModel์ด ๋„ˆ๋ฌด ์ปค์ง€๊ฒŒ ๋œ๋‹ค.

Untitled

์—ฌ๊ธฐ์„œ ์—”ํ‹ฐํ‹ฐ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Clean Architecture์—์„œ ๊ฐ ๋ ˆ์ด์–ด์˜ ์˜์กด์„ฑ์€ ์•ˆ์ชฝ์œผ๋กœ๋งŒ ํ–ฅํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. ์ฆ‰ ๋‚ด๋ถ€ ์›์— ์žˆ๋Š” ๊ฒƒ์ด ์ •์ฑ…์ด๋ฉฐ ๋ฐ”๊นฅ์œผ๋กœ ๊ฐˆ ์ˆ˜๋ก ๊ทธ ์ •์ฑ…์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

Untitled

โ” Use Case ์™€ ๊ฐ ๋ ˆ์ด์–ด

Use Case๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ์˜ ์œ ์Šค์ผ€์ด์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์‚ฌ์šฉ์ž(Actor)๊ฐ€ ํ•˜๋Š” ํ–‰๋™๋“ค์„ ๋งํ•œ๋‹ค.

  1. Domain Layer : Android์—์„œ UseCase๋Š” ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์— ์†ํ•œ๋‹ค. ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋Š” Android ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กด์ ์ด์ง€ ์•Š์€ ์ˆœ์ˆ˜ Kotlin ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” UseCase, Entity(Model/ Room, Retrofit๊ณผ ์—ฐ๊ฒฐ ๋˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ data class), Repository(ํ•  ํ–‰๋™๋“ค ๋‹ด๊ณ  ์žˆ์Œ, interface ํ˜•ํƒœ)๊ฐ€ ํฌํ•จ๋œ๋‹ค. Use Case๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Data Layer์—์„œ Repository๋ฅผ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  2. Data Layer : ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์—์„œ ๋งŒ๋“  repository๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉฐ(ResositoryImpl ํด๋ž˜์Šค ์ƒ์„ฑ) ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋ฅผ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ๊ด€๋ จ๋œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณณ์ด๋‹ค. Mapper๋ฅผ ํ†ตํ•ด DB๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ UI์— ๋งž๋Š” ๋ชจ๋ธ๋กœ ๋งคํ•‘ํ•œ๋‹ค. Repository์—์„œ ์‚ฌ์šฉํ•˜๋Š” DTO๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ณณ์ด๋‹ค.

  3. Presentation Layer : Clean Architecture์—์„œ ์ตœ์ƒ๋‹จ ๋ ˆ์ด์–ด์ด๋ฉฐ Android ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋งค์šฐ ์—ฐ๊ด€๋˜์–ด ์žˆ๋‹ค. ๋˜ํ•œ ์•„๋ž˜ ๋ ˆ์ด์–ด๋“ค์„ ์ž์œ ๋กญ๊ฒŒ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค. MVVM ๋””์ž์ธ ํŒจํ„ด์ด ์—ฌ๊ธฐ์„œ ์ ์šฉ๋œ๋‹ค.

๐Ÿ”” Use Case๋ฅผ ์จ์•ผํ• ๊นŒ? ํ•„์š”์—†์–ด ๋ณด์ด๋Š”๋ฐ?

UseCase๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ViewModel์ด ์–ด๋–ค๊ฒƒ์„ ํ•˜๊ณ ์ž ํ•˜๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆ๊ณ  ViewModel์˜ ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. Repository๋ฅผ parameter๋กœ ๋„ฃ์œผ๋ฉด repository ๋‚ด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  viewmodel์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜์ง€๋งŒ usecase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด viewmodel์— ์˜ํ–ฅ์„ ์ „ํ˜€ ์ฃผ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!!

ViewModel์˜ ์˜์กด๋„๋ฅผ ์ค„์ด๊ธฐ!!

์ •๋ฆฌ !!

  1. ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด : UseCase, Model, Repository(Interface) // ์ˆœ์ˆ˜ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ