๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/๐Ÿฟ ์˜ํ™” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์ผ์ง€

Android ์ข…์†ํ•ญ๋ชฉ ์‚ฝ์ž… ์•Œ์•„๋ณด๊ธฐ 1ํƒ„

by hyeonha 2024. 2. 7.

๋ชฉ์ฐจ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

    ์ด๋ฒˆ์— ์ƒˆ๋กœ ๋“ค์–ด์˜จ ํ”„๋กœ์ ํ„ฐ์—์„œ๋Š” Hilt๋ผ๋Š” ์ข…์†ํ•ญ๋ชฉ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. 

    ๋‚˜๋Š” hilt๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ ์ข…์†ํ•ญ๋ชฉ ์‚ฝ์ž…์˜ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ์Šคํ„ฐ๋””๊ฐ€  ํ•„์š”ํ–ˆ๋Š”๋ฐ ๋งˆ์นจ ๊ฐœ๋ฐœ ์ค‘ ์‹œ๊ฐ„์ด ๋‚˜์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์— ๋Œ€ํ•ด์„œ 3ํƒ„์— ๊ฑธ์ณ์„œ ์ดํ•ดํ•ด๋ณด๋„๋ก ํ•œ๋‹ค!!

    ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์ด๋ž€??

    ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ดํ•ดํ•ด๋ณด์ž.

    ์˜ค๋Š˜์˜ ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋‹ด์€ Menu ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด  ์ด ํด๋ž˜์Šค์—์„œ๋Š” ์•„์นจ ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“œ๋Š” Breakfast ํด๋ž˜์Šค์˜ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ์ข…์†ํ•ญ๋ชฉ์ด๋ผ๊ณ  ํ•œ๋‹ค. Menu ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Breakfast ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค. 

     

    ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€

    1๏ธโƒฃ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ ์ข…์†ํ•ญ๋ชฉ์„ ๊ตฌ์„ฑํ•œ๋‹ค.

         - Menu ํด๋ž˜์Šค๋Š” Breakfast ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

    2๏ธโƒฃ  ๋‹ค๋ฅธ ๊ณณ์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

        - Context getter ๋ฐ getSystemService์™€ ๊ฐ™์€ android api์˜ ์ผ๋ถ€๊ฐ€ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

    3๏ธโƒฃ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฐ›๋Š”๋‹ค.

        -์•ฑ์€ ํด๋ž˜์Šค๊ฐ€ ๊ตฌ์„ฑ๋  ๋•Œ ์ด๋Ÿฌํ•œ ์ข…์†ํ•ญ๋ชฉ(ํ•„์š”ํ•œ ํด๋ž˜์Šค)์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๊ฐ ์ข…์† ํ•ญ๋ชฉ์ด ํ•„์š”ํ•œ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

         ์šฐ๋ฆฌ ์˜ˆ์‹œ์—์„œ ์‚ดํŽด๋ณด๋ฉด Menu ์ƒ์„ฑ์ž๋Š” Breakfast ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

     

    ์ด ๋•Œ 3๋ฒˆ์ด ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์ด๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ข…์† ํ•ญ๋ชฉ์„ ์–ป๋Š” ๋Œ€์‹ ์— ํด๋ž˜์Šค์˜ ์ข…์† ํ•ญ๋ชฉ์„ ๋ฐ›์•„์„œ ์ œ๊ณตํ•œ๋‹ค.

     

    ์ด ์˜ˆ๋Š” 1๋ฒˆ ๋ฐฉ์‹์œผ๋กœ ์ž์ฒด Breakfast ์ข…์† ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•˜๋Š” Menu๋ฅผ ๋‚˜ํƒ€๋‚ธ ์ฝ”๋“œ์ด๋‹ค. Menu ํด๋ž˜์Šค๊ฐ€ ์ž์ฒด Breakfast๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์ด ์•„๋‹ˆ๋‹ค. 

    class Menu {
    
        private val breakfast = Breakfast()
    
        fun eatRice() {
            breakfast.eatRice()
        }
    }
    
    fun main(args: Array

     

    ์ด์ œ ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž… ์‹œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. 

    Menu ์ƒ์„ฑ์ž์— breakfast๋ผ๋Š” ์ข…์† ํ•ญ๋ชฉ์„ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด Menu ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ Breakfast ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

    class Menu(private val breakfast : Breakfast) { 
    	fun makeRice() {
        	breakfast.makeRice()
            }
     }
     
     
     fun main(args : Array

     

    main ํ•จ์ˆ˜์—์„œ Menu ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ... 

    Menu ํด๋ž˜์Šค๋Š” Breakfast์— ์ข…์†๋˜๋ฏ€๋กœ ์•ฑ์€ Breakfast ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ Menu ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

     

    ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•  ๋•Œ์˜ ์ด์  ๋‘ ๊ฐ€์ง€

    1๏ธโƒฃ Menu์˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

    Breakfast์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ Menu์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด Menu์—์„œ ์‚ฌ์šฉํ•  AmericanBreakfast์ด๋ผ๋Š” ์ƒˆ๋กœ์šด Breakfast ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

    ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ AmericanBreakfast ์„œ๋ธŒํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด Menu ํด๋ž˜์Šค๋Š” ๋ณ€๊ฒฝ์—†์ด ์ž‘๋™ํ•œ๋‹ค.

     

    2๏ธโƒฃ Menu์˜ ํ…Œ์ŠคํŠธ ํŽธ์˜์„ฑ


     

     

    Android์—์„œ ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์„ ์‹คํ–‰ํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•

     

    1๏ธโƒฃ ์ƒ์„ฑ์ž ์‚ฝ์ž…

        ํด๋ž˜์Šค์˜ ์ข…์† ํ•ญ๋ชฉ์„ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ํ˜„์žฌ์˜ ํด๋ž˜์Šค์— ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ํ˜„์žฌ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    ์œ„์—์„œ ์‚ดํŽด๋ณธ ๋ฐฉ์‹์ด๋‹ค.

    2๏ธโƒฃ ํ•„๋“œ ์‚ฝ์ž… ๋˜๋Š” setter ์‚ฝ์ž…

        ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ํ”„๋ž˜๊ทธ๋จผํŠธ์™€ ๊ฐ™์€ ํŠน์ • android ํด๋ž˜์Šค๋Š” ์‹œ์Šคํ…œ์—์„œ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋ฏ€๋กœ ์ƒ์„ฑ์ž ์‚ฝ์ž…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

        ํ•„๋“œ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข…์† ํ•ญ๋ชฉ์€ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์— ์ธ์Šคํ„ด์Šคํ™”๋œ๋‹ค!

        ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž. 

    class Menu {
    	lateinit var breakfast : Breakfast
        
        fun makeRice() {
        	breakfast.makeRice()
        }
    }
    
    
    fun main(args: Array

    ์ข…์† ํ•ญ๋ชฉ ์ž๋™ ์‚ฝ์ž…

    ์ง€๊ธˆ๊นŒ์ง€ ์„ค๋ช…ํ•œ ๋ฐฉ์‹์ฒ˜๋Ÿผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค๋“ค์˜ ์ข…์† ํ•ญ๋ชฉ์„ ์ง์ ‘ ์ƒ์„ฑ , ์ œ๊ณต, ๊ด€๋ฆฌํ–ˆ๋‹ค.์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์ข…์† ํ•ญ๋ชฉ ์ง์ ‘ ์‚ฝ์ž… ๋˜๋Š” ์ข…์† ํ•ญ๋ชฉ ์ˆ˜๋™ ์‚ฝ์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

    Menu ์˜ˆ์—์„œ๋Š” ์ข…์† ํ•ญ๋ชฉ์ด Breakfast ํด๋ž˜์Šค ํ•˜๋‚˜๋งŒ ์žˆ์—ˆ์ง€๋งŒ ํ•„์š”ํ•œ ํด๋ž˜์Šค ์ฆ‰ ์ข…์† ํ•ญ๋ชฉ๊ณผ ํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ˆ˜๋™์œผ๋กœ ์ข…์† ํ•ญ๋ชฉ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

     

    - ์ตœ์ƒ์œ„ ๋ ˆ์ด์–ด์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” ๋ ˆ์ด์–ด์˜ ๋ชจ๋“  ์ข…์†ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค. 

    ์‹ค์ œ ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์•„์นจ, ์ ์‹ฌ, ์ €๋…์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์นจ์—๋Š” ๋ฐฅ, ๊ตญ, ๋ฐ˜์ฐฌ(๋ฉ”์ธ,์‚ฌ์ด๋“œ), ๋””์ €ํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

     

    - ์ข…์† ํ•ญ๋ชฉ์„ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์„ ๋•Œ (์ง€์—ฐ ์ดˆ๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด ๋ฒ”์œ„๋ฅผ ์•ฑ์˜ ํ๋ฆ„์œผ๋กœ ์ง€์ •ํ• ๋–„)

    ๋Š” ๋งž์ถค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค. 

        ์ง€๊ธˆ์€ ๊ทธ๋ƒฅ ์ด๋Ÿฐ๊ฒŒ ์žˆ๊ตฌ๋‚˜ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ณ  ํฐ ํ๋ฆ„์„ ์ดํ•ดํ•ด๋ณด์ž! 

     

    ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ข…์† ํ•ญ๋ชฉ์„ ์ƒ์„ฑ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•ด์•ผํ•œ๋‹ค!!!  ์ด ๋Œ€ Dagger๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

     

    ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์˜ ๋Œ€์•ˆ : ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ 

    object ServiceLocator {
    	fun makeRice() : Breakfast = Breakfast()
    }
    
    
    class Menu {
    	private val breakfast : ServiceLocator.makeRice()
        
        fun makeRice() {
        	breakfast.makeRice()
      	}
    }
    
    fun main(args : Array

     

    Android ์•ฑ์—์„œ Hilt ์‚ฌ์šฉ

    Hilt๋Š” Android์—์„œ ์ข…์† ํ•ญ๋ชฉ์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•œ Jetpack์˜ ๊ถŒ์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

    ์•ž์„œ ๋งํ•œ Dagger๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ๋‹ค.

     

    ์ •๋ฆฌํ•˜๊ธฐ

    1๏ธโƒฃ์ข…์† ํ•ญ๋ชฉ์ด๋ž€ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค,

    Menu ํด๋ž˜์Šค์—์„œ ์ข…์†ํ•ญ๋ชฉ์€ Breakfast ํด๋ž˜์Šค์ด๋‹ค

     

    2๏ธโƒฃ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž… ๋ฐฉ๋ฒ• 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

    ์ข…์† ํ•ญ๋ชฉ ์‚ฝ์ž…์ด๋ž€ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฐ›๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    - ์ƒ์„ฑ์ž ์‚ฝ์ž…์€ ํ˜„์žฌ์˜ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ์•ˆ์— ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    - ํ•„๋“œ ์‚ฝ์ž…

    728x90