Published on

๐ŸŽ Swift - Domain ๋ ˆ์ด์–ด์˜ ํ•„์š”์„ฑ

Authors
  • avatar
    Name
    ์ด์ฐฝ์ค€
    Twitter

๋ฐฐ๊ฒฝ

์ €ํฌ ์•ฑ์˜ HomeViewController๋Š” ContainerViewController์ž…๋‹ˆ๋‹ค.

NavigateMapViewController์™€ JourneyListViewController๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ๋‘ ๊ฐ€์ง€ Feature ๋ชจ๋“ˆ์ด ์„œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋“ˆ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ๊ฐ์ž ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋•Œ๋ฌธ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ViewController๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ฐ Feature ๋ชจ๋“ˆ์˜ ViewController๋‚˜ ViewModel์ด ์ƒ์„ฑ๋  ๋•Œ๋Š” Coordinator์—์„œ ๋ณ€ํ™˜ํ•ด ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

์ด๋Ÿฐ ๋™์ž‘ ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฐฉ๋ฒ•์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณผ์ •

Coordinator

์ €ํฌ ์•ฑ์— ๋‘ ๊ฐœ์˜ Feature ๋ชจ๋“ˆ๊ณผ Data ๋ ˆ์ด์–ด ๋ชจ๋“ˆ์„ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์„๊นŒ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์•ž์—์„œ๋„ ์–ธ๊ธ‰ ๋˜์—ˆ๋“ฏ์ด ๋”ฑ ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ Coordinator์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Coordinator์˜ ์—ญํ• ์€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

Navigation Controller๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ ViewController ๊ฐ„์˜ ์ด๋™๊ณผ

์ƒ์„ฑ๋  ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™˜ ๋ฐ ์ฃผ์ž…์ด Coordinator์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ Coordinator์˜ ์—ญํ• ์ด ์•„๋‹Œ ๊ฒƒ์ด์ฃ .

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐฉ๋ฒ•์€..?

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์ •๋„๊ฐ€ ๋‚จ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ Feature๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ์ฃผ์ž…๋ฐ›์•„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๋˜๊ฐ€..

๊ฐ Feature ๊ฐ„์— ๊ตํ™˜๋˜๋Š” ๋กœ์ง์„ ๋‹ด๋‹นํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” Adapter์™€ ๊ฐ™์€ ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ฃ .

๊ทธ๋ฆฌ๊ณ  ๋†€๋ž๊ฒŒ๋„ ์ด ๋‘ ์—ญํ• ์„ ํ•˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ์ €ํฌ๋Š” ์ด๋ฏธ ์Šคํ”„๋ฆฐํŠธ ๊ธฐ๊ฐ„๋™์•ˆ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”๋กœ Clean Architecture์˜ Domain ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค. ๐Ÿซข

Domain Layer

๊ทธ๋Ÿฌ๋ฉด Domain ๋ ˆ์ด์–ด๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— ๋ณดํ†ต ์ด ๋ ˆ์ด์–ด์— ์–ด๋–ค ์—ญํ• ์ด ๋“ค์–ด๊ฐ€๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ์ง„์˜์— ์•„์ฃผ ์นœ์ ˆํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ๋”๋ผ๊ณ ์š”..

ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ํ•œ ๋ฒˆ ์ค‘์ ์ ์œผ๋กœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋Š” UI ๋ ˆ์ด์–ด์™€ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ์ค‘๊ฐ„์— ์žˆ๋Š” "์„ ํƒ์ " ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฑด ์ด๋ฏธ ์ €ํฌ๊ฐ€ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์•Œ๊ณ  ์žˆ์ฃ ? ๋ชจ๋“ˆํ™”๋ฅผ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ €ํฌ ์•ฑ๋„ ๊ตณ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•˜์„ ๋ ˆ์ด์–ด์˜€์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

UseCase

๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์—์„œ ๋น ์งˆ ์ˆ˜ ์—†๋Š” UseCase์ž…๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ ค๋ฉด ์ค‘์š”ํ•œ ํ•˜๋‚˜์˜ ์ „์ œ๋ฅผ ๊น”๊ณ  ๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ๊ณผ ์ƒ๊ด€์—†์ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ , ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ํ”Œ๋žซํผ์ด๋ž€ iOS, macOS ๊ฐ™์€ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

UIKit์„ ์‚ฌ์šฉํ•˜๋˜, AppKit์„ ์‚ฌ์šฉํ•˜๋˜ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์— ์†ํ•ด์žˆ๋Š” ๋กœ์ง๋“ค์€ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ด๋Ÿฐ ์ „์ œ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์˜ ์—ญํ• ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์บก์Šํ™”๋ฅผ ๋งก๊ณ  ์žˆ๊ณ , ์—ฌ๋Ÿฌ ViewModel์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— UseCase๋Š” ViewModel์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์•ˆ๋˜๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ์ข…์†์„ฑ๋งŒ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ViewModel๋“ค์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณดํ†ต ViewModel๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ๋“ค์— ๋Œ€ํ•œ ์ •์˜๋„ ์ด Domain ๋ ˆ์ด์–ด์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

MusicSpot ์—์„œ๋Š”?

์‚ฌ์‹ค ์ €ํฌ ์•ฑ์€ UseCase๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ ํ•„์š”์„ฑ์„ ๋Š๋ผ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”...

์ €ํฌ ์•ฑ์€ ์ค‘๋ณต์ ์œผ๋กœ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ–๋Š” ViewModel์ด "์•„์ง๊นŒ์ง€๋Š”" ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  UIKit ์™ธ์˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ƒ ํ•˜๋ฉด ๊ทธ๊ฒƒ๋„ ์•„๋‹ˆ์ฃ .

๋•Œ๋ฌธ์— UseCase์— ๋Œ€ํ•œ ์‚ฌ์šฉ์€ ์กฐ๊ธˆ ์ œ์ณ๋‘๊ณ , ์šฐ์„  ๊ณต์šฉ์˜ Model Layer๋กœ์จ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

๊ฒฐ๊ตญ ๋ชจ๋“  Feature ํŒจํ‚ค์ง€๋“ค์ด ๊ณตํ†ต์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

์„ค๊ณ„ ๊ณผ์ •์—์„œ ์ข€ ๋” ์ €ํฌ ์•ฑ์˜ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด๋ดค์œผ๋ฉด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜์„ ์ผ ๊ฐ™์€๋ฐ ์กฐ๊ธˆ ์•„์‰ฝ๋„ค์š”.

๊ทธ๋ž˜๋„ ์ด๋ฒˆ ๊ธฐํšŒ์— ์žฅ/๋‹จ์  ๋น„๊ต๋กœ๋„ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋“ค์ด ์ถฉ๋ถ„ํžˆ ๋งŽ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ

Android Developers - ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด