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

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