๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฑ| Android/๐Ÿ“˜ | ๊ธฐ๋ก

[Android] hilt์™€ ํ•จ๊ป˜ ๋ณด๋Š” clean architecture์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

by immgga 2024. 11. 8.

์ถœ์ฒ˜: unsplash.com

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Android ๊ฐœ๋ฐœ์—์„œ ์™œ clean architecture๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ clean architecture์— ๊ด€ํ•ด์„œ ๊ถ๊ธˆํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๊ณต๋ถ€ํ•ด์„œ ์ ์–ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.

๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ฐธ๊ณ ํ•œ ํฌ์ŠคํŒ…๋„ ํ•จ๊ป˜ ๋‚จ๊ธธ ํ…Œ๋‹ˆ ๋”ํ•œ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋ฉด ํ™•์ธํ•ด ๋ณด๋Š” ๊ฒƒ๋„ ์ข‹๊ฒ ๋‹ค.

 

clean architecture์˜ ์ •์˜

์ •์˜๋Š” ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—๋„ ์ž์ฃผ ์–ธ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

clean architecture๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•  ์›์น™๊ณผ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฐœ๋….
๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ๋ณด๋‹ค ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜์ž๋ฉด, ๊ทœ๋ชจ๊ฐ€ ํฐ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•˜๋Š” ๊ตฌ์กฐ ๊ฐ™์€ ๊ฑฐ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

๊ทธ๋ž˜์„œ ์™œ ์“ฐ๋Š”๊ฐ€?

์ฒ˜์Œ์— ์ด ๊ฐœ๋…์„ ์ ‘ํ–ˆ์„ ๋•Œ๋Š” ๊ทธ๋ƒฅ ์ข‹๊ตฌ๋‚˜ ํ•˜๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค.

์‹œ๊ฐ„์ด ํ๋ฅด๊ณ  ๋‚˜๋‹ˆ๊นŒ ์™œ ์ด ๊ฐœ๋…์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

 

์›๋ž˜๋Š” ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค.

์ด๊ฒƒ๋„ ์ •๋‹ต์ด์ง€๋งŒ, ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ๋” ์žˆ๋”๋ผ.

  1. ํ™•์žฅ์„ฑ
    ๊ณ„์ธต ๊ฐ„์˜ ๋ถ„๋ฆฌ๋กœ ๋ถ€์ž‘์šฉ ์—†์ด ์‹œ์Šคํ…œ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
     โ†ณ  ๋‡Œํ”ผ์…œ์ด์ง€๋งŒ ์ด๋Š” multi module์„ ์ด์šฉํ•ด feature(๊ธฐ๋Šฅ) ๋ณ„๋กœ module์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
  2. ์‰ฌ์šด ํƒ์ƒ‰
    ๊ตฌ๋ถ„๋œ ๊ณ„์ธต๊ณผ ๊ฐ ์ฑ…์ž„์— ๋”ฐ๋ผ ๋„ค์ด๋ฐ ๋œ ํŒŒ์ผ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
     โ†ณ clean architecture๋ฅผ ์ ์šฉํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
  3. ํ˜‘์—… ์šฉ์ด์„ฑ
    ์ž˜ ์ •์˜๋œ clean architecture๋Š” ํŒ€์ด ์•ฑ์˜ ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์„ ๋™์‹œ์— ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

     โ†ณ ์ž์‹ ์ด ๋งก์€ ๊ธฐ๋Šฅ์„ clean architecture๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค๋ฅธ ํŒ€์›์˜ ์ฝ”๋“œ๋ฅผ ์นจํ•ดํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋ฅธ ์žฅ์ ๋“ค๋„ ๋งŽ์ง€๋งŒ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ๊ณต๊ฐ์ด ๊ฐ€๋Š” ์žฅ์ ๋“ค๋กœ ๊ฐ€์ ธ์™€ ๋ดค๋‹ค.

์ถ”๊ฐ€์ ์ธ ์žฅ์ ๋“ค์ด ๊ถ๊ธˆํ•˜๋ฉด ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ํ™•์ธํ•ด ๋ณด์ž.

์ฐธ๊ณ  ํฌ์ŠคํŒ… 1, ์ฐธ๊ณ  ํฌ์ŠคํŒ… 2

 

 

๊ทธ๋Ÿฌ๋ฉด clean architecture๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ์ž˜ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋ฐ”๋กœ solid ์›์น™์„ ์ค€์ˆ˜ํ•˜๋ฉด์„œ clean architecture๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

clean architecture์™€ solid ์›์น™

clean architecture์€ solid ์›์น™๊ณผ ๊นŠ์€ ์—ฐ๊ด€์ด ์žˆ๋‹ค.

clean architecture๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ solid ์›์น™์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

  1. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)
    ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ. ํด๋ž˜์Šค์˜ ์ฃผ์ œ๊ฐ€ ์ฃผ์ฒด๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค
    ex) ๋„์„œ๊ด€์„ ์˜ˆ๋กœ ๋“ค๋ฉด, ๋Œ€์ถœ ๋ฐ ๋ฐ˜๋‚ฉ์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์—์„œ๋Š” ๋Œ€์ถœ, ๋ฐ˜๋‚ฉ ํ•จ์ˆ˜๋งŒ, ๋„์„œ ์žฌ๊ณ ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์—์„œ๋Š” ๋„์„œ ์ถ”๊ฐ€, ์‚ญ์ œ ํ•จ์ˆ˜๋งŒ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
     โ†ณ clean architecture์—์„œ๋Š” ๊ฐ ๊ณ„์ธต์—๊ฒŒ ๋ช…ํ™•ํ•œ ์ฑ…์ž„์„ ๋ถ€์—ฌํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ™์€ ๊ณ„์ธต์ด์–ด๋„ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์ •ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  2. ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP)
    ํ™•์žฅ์—๋Š” ๊ฐœ๋ฐฉ์ ์ด์ง€๋งŒ ์ˆ˜์ •์—๋Š” ํ์‡„์ ์ด์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ํด๋ž˜์Šค์˜ ๋™์ž‘์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 
     โ†ณ clean architecture์—์„œ๋Š” ๊ธฐ์กด ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋‹ด์€ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
  3. ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™(ISP)
    ์ƒ์†๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์—ญํ• ์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    ex) ์ง์‚ฌ๊ฐํ˜•์€ ๋†’์ด ๋„ˆ๋น„๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •์‚ฌ๊ฐํ˜•์€ ๋†’์ด์™€ ๋„ˆ๋น„๊ฐ€ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •์‚ฌ๊ฐํ˜•์€ ์ง์‚ฌ๊ฐํ˜•์˜ ํ•˜์œ„ ํƒ€์ž…์œผ๋กœ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.
     โ†ณ repository๊ฐ€ data source์˜ ์ž์‹๋“ค ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋„ ๋™์ผํ•œ ์—ญํ• ์„ ํ•ด์•ผ ํ•œ๋‹ค.

    ์ƒ์†์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ํ™•์žฅ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ๋„ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋‹ค๋ฅธ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
     โ†ณ use case์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ repository๋ฅผ property๋กœ ์ถ”๊ฐ€ ๋˜๋Š” ๋ณ€๊ฒฝํ•ด์„œ ๋กœ์ง์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , view model์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ use case property๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP)
    ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ง€๋‚˜์น˜๊ฒŒ ๊ด‘๋ฒ”์œ„ํ•˜๊ฑฐ๋‚˜ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ ๋˜๊ณ , ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.
     โ†ณ clean architecture์—์„œ๋Š” ๊ฐ ๊ณ„์ธต ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ๊ฐ์˜ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ๋ชฉ์ ์— ์ด์šฉ๋˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  5. ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)
    ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋Œ€์‹  ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•œ ์ถ”์ƒ ํƒ€์ž…์— ์˜์กดํ•œ๋‹ค.
     โ†ณ clean architecture์—์„œ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ด ํ•˜์œ„ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด ์ƒ์œ„ ๋ชจ๋“ˆ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋Š” ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์ž.

https://www.pinslog.com/146

 

Clean Architecture๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„๋ณด๋Š” SOLID ์›์น™

๋“ค์–ด๊ฐ€๋ฉฐ Clean Architecture์™€ ํ•จ๊ป˜ ๋“ฑ์žฅํ•˜๋Š” MVP, MVVM ํŒจํ„ด ๋‚˜๋Š” ์ด์ „์— MVVM ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ฐฉ๊ฐํ–ˆ์—ˆ๋‹ค. ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ == MVVM ํŒจํ„ด ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ๊ทธ

www.pinslog.com

 

clean architecture์˜ ๊ฐ ๊ณ„์ธต์˜ ๊ตฌ์กฐ

clean architecture์˜ ๊ฐ ๊ณ„์ธต์€ data, domain, ui(presentation) layer๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  1. data
    ์•ฑ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ณ„ ์ €์žฅ์†Œ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    ๋‹ค๋ฅธ layer๋Š” data source์— ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. data layer์˜ ์ง„์ž…์ ์€ ํ•ญ์ƒ repository class ์ด์–ด์•ผ ํ•œ๋‹ค.
    repository์—์„œ data source๋ฅผ ์ด์šฉํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์„ฑํ•œ๋‹ค.
    1. repository
    2. data source
  2. doamin(์„ ํƒ์‚ฌํ•ญ)
    ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ์—ฌ๋Ÿฌ view model์—์„œ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์บก์Šํ™”ํ•œ๋‹ค.
    ๋ณต์žก์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์„ ํ˜ธํ•˜๋Š” ๋“ฑ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” layer.
    use case์—์„œ data layer์˜ repository๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์บก์Šํ™”ํ•œ๋‹ค.
    1. use case  
  3. ui(presentation)
    ํ™”๋ฉด์— application ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์ง„ํ–‰ํ•œ๋‹ค.
    ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ์‘๋‹ต ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋„๋ก UI๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•œ๋‹ค.
    ui state๋ฅผ ์ •์˜ํ•˜๊ณ  view model์—์„œ ui state๋ฅผ ์ด์šฉํ•ด ui element์— state ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
    1. ui elements
    2. view model
    3. ui state

์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ .

https://developer.android.com/topic/architecture?hl=ko

 

์•ฑ ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ด๋“œ  |  Android Developers

์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ด๋“œ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ์ด ๊ฐ€์ด๋“œ์—๋Š” ๊ณ ํ’ˆ์งˆ์˜ ๊ฐ•๋ ฅํ•œ

developer.android.com

 

clean architecture์™€ hilt

์ด clean architecture๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ•ญ์ƒ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” ๊ฒƒ์ด ์˜์กด์„ฑ ์ฃผ์ž…์ด๋‹ค.

๊ทธ์ค‘ hilt๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.

์™œ clean architecture๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, hilt๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

 

hilt๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

  1. ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ ๊ฐ์†Œ
    hilt๋Š” ์˜์กด์„ฑ ์ฃผ์ž… ์ฝ”๋“œ ๋Œ€๋ถ€๋ถ„์„ ์ƒ์„ฑํ•ด ์ค˜์„œ Dagger์— ๋น„ํ•ด ์ž‘์„ฑํ•ด์•ผ ํ•  ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์—ฌ์ค€๋‹ค.
  2. ์•ˆ๋“œ๋กœ์ด๋“œ ์ปดํฌ๋„ŒํŠธ์™€ ํ†ตํ•ฉ
    activity, fragment, view model ๋“ฑ ์•ˆ๋“œ๋กœ์ด๋“œ ์ปดํฌ๋„ŒํŠธ์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค์— ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. @AndroidEntryPoint์™€ @HiltViewModel์ด ์žˆ๋‹ค.
  3. ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜ ์ง€์›
    hilt๋Š” milit module project ํ™˜๊ฒฝ์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•œ๋‹ค. ์ด๋กœ ์ธํ•ด ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ณณ์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ hilt๊ฐ€ ์œ„์˜ ์žฅ์ ๋“ค์ด ์žˆ์–ด์„œ clean architecture์—์„œ ์˜์กด์„ฑ ์ฃผ์ž… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์จ ์“ฐ์ด๋Š” ๊ฒƒ์€ ์•Œ๊ฒ ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋” ๊ถ๊ธˆํ•ด์ง„๋‹ค.

clean architecture๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๊ผญ ์˜์กด์„ฑ ์ฃผ์ž…์ด ํ•„์š”ํ•œ ๊ฑด๊ฐ€?

 

๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ ์˜์กด์„ฑ ์ฃผ์ž… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  clean architecture๋ฅผ ๊ตฌํ˜„ํ•œ sample์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์ด clean architecture์— ํ•„์ˆ˜์ ์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ์•„๋‹Œ ๊ฑด ์•Œ๊ฒ ๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ฉด ์•ˆ ํ•ด๋„ ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?

 

์œ„ ๊ฐ™์€ ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์ž๋ฃŒ๋ฅผ ๋” ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

๊ผญ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ?

์•„๋ฌด๋ฆฌ ์ฐพ์•„๋ด๋„ ์ž๋ฃŒ๋“ค์ด ๋‚˜์˜ค์ง€ ์•Š์•„์„œ AI(perplexity) ๊ธฐ๋ฐ˜ ๋‡Œํ”ผ์…œ์„ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ๋‹ค.

 

clean architecture์˜ ์žฅ์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์ด ์ด๋ ‡๊ฒŒ ์–ธ๊ธ‰ํ•œ๋‹ค.

  • ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ
  • ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ

clean architecture์—์„œ์˜ ํ•ต์‹ฌ์€ ์˜์กด์„ฑ ๊ทœ์น™์ด๋‹ค. ์˜์กด์„ฑ ๊ทœ์น™์— ๋”ฐ๋ฅด๋ฉด ๋‚ด๋ถ€ layer๋Š” ์™ธ๋ถ€ layer์— ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ด ๊ทœ์น™์„ ๋”ฐ๋ฅผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๊ทœ์น™์„ ๋” ์‰ฝ๊ฒŒ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ hilt๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ๋” ๊ฐ„ํŽธํ•ด์ง€๊ณ  ์ˆ˜๋™์œผ๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ •๋ฆฌ

์ด๋ฒˆ์— ๋‹ค์–‘ํ•œ clean architecture์— ๋Œ€ํ•œ ์ž๋ฃŒ๋“ค์„ ์ฐพ์•„๋ณด๋ฉด์„œ clean architecture์—๋Š” solid ์›์น™, ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ hilt ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋…๋“ค์ด ์—ฐ๊ด€๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋‹ค์–‘ํ•œ ๊ฐœ๋…์„ ์ฐพ์•„๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

 

๊ถ๊ธˆํ–ˆ๋˜ ๊ฒƒ๋“ค์€ ์ž๋ฃŒ๋“ค์ด ๋งŽ์ง€ ์•Š์•„์„œ AI(perplexity) ๊ธฐ๋ฐ˜์˜ ๋‡Œํ”ผ์…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•œ ์  ์–‘ํ•ด ๋ถ€ํƒํ•œ๋‹ค.

ํ˜น์‹œ ๋ˆ„๋ฝ๋œ ์ ๊ณผ ์ถ”๊ฐ€ํ•  ๊ฐœ๋…์ด ์žˆ๋‹ค๋ฉด ์ œ๋ณดํ•ด ์ฃผ๋ฉด ๊ณ ๋ง™๊ฒ ๋‹ค.

 

๋‹ค์Œ์—๋Š” clean architecture์™€ ํ•จ๊ป˜ ์ค€ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ธ mvvm์— ๋Œ€ํ•œ ๊ณ ์ฐฐ์„ ์ง„ํ–‰ํ•ด ๋ณด๊ฒ ๋‹ค.

์‚ฌ์‹ค ๋ง๋งŒ ๊ณ ์ฐฐ์ด์ง€ ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ๊ถ๊ธˆํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์ด๋‹ค.

728x90