๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] Dagger2 - Application ํ™œ์šฉํ•˜๊ธฐ

interfacer_han 2024. 6. 25. 09:12

#1 ์ด์ „ ๊ธ€

 

[Android] Dagger2 - ๊ธฐ์ดˆ

#1 ์ด์ „ ๊ธ€ ์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)#1 ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ž€?#1-1 Dependent์™€ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() private

kenel.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์„œ, Application์„ ํ™œ์šฉํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด, @Component ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ์ค‘๋ณต ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•œ๋‹ค.
 

#2 Application์˜ ํ™œ์šฉ์„ฑ

 

Application  |  Android Developers

 

developer.android.com

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ ๋ชจ๋“  Activity์˜ ์ƒ์„ฑ ์ „์— ์ƒ์„ฑ๋˜๋Š” ์ตœ์ƒ์œ„ ๊ฐ์ฒด์ด๊ธฐ๋„ ํ•˜๋‹ค. Application์€ ์•ฑ์˜ ์ „์—ญ์—์„œ ์œ ์ผํ•˜๊ฒŒ(= ์‹ฑ๊ธ€ํ†ค) ์‹คํ–‰๋˜๋Š” ํด๋ž˜์Šค๋ผ๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํŠน์ง•์„ dagger๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ ์ ํžˆ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
 
์ด์ „ ๊ธ€์—์„œ๋Š” MainActivity๋กœ๋ถ€ํ„ฐ @Component ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Car ๊ฐ์ฒด๋ฅผ ์–ป์—ˆ๋‹ค. ์ด ๋•Œ, ์‹ค์ œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Activity๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด, ๊ทธ ๊ฐฏ์ˆ˜๋งŒํผ @Component ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์–ด์•ผํ•  ๊ฒƒ์ด๋‹ค. ์ฆ‰ ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์ค‘๋ณต๋˜๋Š” ๋™์ž‘์„ ํ•ด๊ฒฐํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ํ•ด๋‹น @Component ์ธ์Šคํ„ด์Šค๋ฅผ Application ๊ฐ์ฒด์— ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 
 

#3 ์ฝ”๋“œ ์ˆ˜์ •

#3-1 ๊ฐœ์š”

์ด์ œ, Application ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉ์ž ์ •์˜ Application ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ธฐ๋ณธ Application ๋Œ€์‹  ์‚ฌ์šฉ์ž ์ •์˜ Application ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด๊ฒ ๋‹ค.
 

#3-2 MyApplication.kt ์ƒ์„ฑ

// package com.example.useapplication

import android.app.Application

class MyApplication : Application() {
    lateinit var carComponent: CarComponent

    override fun onCreate() {
        super.onCreate()
        carComponent = initDagger()
    }

    private fun initDagger(): CarComponent {
        return DaggerCarComponent.create()
    }
}

 

#3-3 AndroidManifest.xml ์ˆ˜์ •

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:name=".MyApplication"
        ...
    </application>

</manifest>

<application> ํด๋ž˜์Šค์˜ android:name ์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ์†์„ฑ์€ ์•ฑ์˜ ๊ธฐ๋ณธ Application ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์—ฌ๊ธฐ์— ๋ฐฉ๊ธˆ ๋งŒ๋“ค์—ˆ๋˜ MyApplication ํด๋ž˜์Šค๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ์ด์ œ, Dagger์˜ Component ํด๋ž˜์Šค๋ฅผ Application์— ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค.
 
์—ฌ๋‹ด์œผ๋กœ, ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด <application>์˜ android:name ์†์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ๋žต๋˜์–ด์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์€ ๊ธฐ๋ณธ Application ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•ด์„œ ์ „์—ญ์ ์ธ ์ดˆ๊ธฐํ™” ์ž‘์—…์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์•ฑ์€ android:name ์†์„ฑ์„ ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค. 
 

#3-4 MainActivity.kt ์ˆ˜์ •

// package com.example.useapplication

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedState: Bundle?) {
        super.onCreate(savedState)
        setContentView(R.layout.activity_main)
/*
        ...
*/
        /* application์„ getํ•˜๊ณ  MyApplication์œผ๋กœ ํƒ€์ž… ์บ์ŠคํŒ….
         * ํƒ€์ž… ์บ์ŠคํŒ…์˜ ์ด์œ :
         * application ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Application ํƒ€์ž…์œผ๋กœ ์ œ๊ณต๋˜์ง€๋งŒ,
         * ์‹ค์ œ๋กœ๋Š” MyApplication ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
         */
        val car = (application as MyApplication).carComponent.getCar()
        car.startCar()
    }
}

 

#4 ์ž‘๋™ ํ™•์ธ (๋กœ๊ทธ ๋ฉ”์‹œ์ง€)

Crankshaft is ready
Cylinder is ready
Piston is ready
Engine is ready
Airbag is ready
Battery is ready
Car is ready

 

#5 ์š”์•ฝ

Application์˜ ํ™œ์šฉ์€ ์ผ์ข…์˜ ์‹ฑ๊ธ€ํ†ค ๊ธฐ๋ฒ•์ด๋ผ๊ณ ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
 

#6 ์™„์„ฑ๋œ ์•ฑ

 

android-practice/dagger2/UseApplication at master · Kanmanemone/android-practice

Contribute to Kanmanemone/android-practice development by creating an account on GitHub.

github.com