세상을 바꾸는 개발자

[Android Dagger2] Dagger2 를 사용해보자!! 본문

안드로이드/Dagger2

[Android Dagger2] Dagger2 를 사용해보자!!

헬창코딩 2021. 6. 24. 22:21

안녕하세요  헬창코딩입니다. 

오늘은 안드로이드에서 dagger2를 사용해보도록 하겠습니다. 

가장 먼저 dagger2가 무엇일까요?? 

 

dagger의존성주입(DI)을 도와주는 프레임워크입니다. 

여기서 의존성 주입(DI)이라는 것은 dependency Injection의 약자입니다. 

의존성 주입은  구성요소 간의 의존관계가 소스 내부가 아닌 외부의 파일 등을 통해 정의되는 디자인 패턴이라고 보시면 됩니다.

음. 예를 들어보면 우리가 자동차를 구매하는데 굳이 엔진에 있는 나사가 몇 개이고 어떤 종류의 부품인지 알 필요 없죠

그래서 사용자가 알필요 없는 것들을 묶어서 알아서 관리를 해준다고 보시면 됩니다.

그렇기 때문에 사용자는 객체의 생성과 사용을 분리시킬 수 있고, 재사용도 편리해진다고 보시면 됩니다.

 

 

 

본격적으로  Dagger2를 사용해서 예제를 만들어보기 전에 근데 안드로이드나 자바에서 Dagger2를 사용하면 어떻게 될지 감이 오지 않는데요

 

예를 들어보겠습니다.

우리가 자동차(Car)라는 객체를 하나 만들고  자동차에는 바퀴(Wheels)와 엔진(Engine) 이 있다고 가정을 해볼게요

코드로 한번 만들어볼게요~

 

Engine.java

 

 

Wheels.java

 

 

Car.java

 

MainActivity.java

 

이렇게 평소대로 만들어봤는데 이렇게 구현하면 객체를 3개나 만들어줘야 하는 귀찮음이 있죠 ㅠㅠ

그래서 Dagger가 나왔습니다. 그럼 Dagger2를 사용해서 한번 만들어볼게요~

 

자 가장먼저 

 

 

1. 프로젝트를 생성합니다. 

 

2. 다음으로 안드로이드 dependencies 에 Dagger2 라이브러리를 implementation 합니다.

1
2
    implementation 'com.google.dagger:dagger:2.35.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.33'
cs

 

https://github.com/google/dagger

 

google/dagger

A fast dependency injector for Android and Java. Contribute to google/dagger development by creating an account on GitHub.

github.com

 

 

3. 위에서 만들었던 Car, Wheels, Engine을 한 번에 만들어줄 Module과 그리고 그것을 연결해주는 Component 를 만들어야 합니다.  위에서 귀찮았던 부분을 Module이 알아서 해줍니다.

 

CarModule.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import dagger.Module;
import dagger.Provides;
 
@Module
public class CarModule {
 
    @Provides
    Car provideCar(Wheels wheels, Engine engine) {
        return new Car(wheels, engine);
    }
 
    @Provides
    Wheels provideWheels() {
        return new Wheels();
    }
 
    @Provides
    Engine provideEngine() {
        return new Engine();
    }
 
}
 
 
cs

여기서 만들어준 객체는 꼭 @Provides 어노테이션을 사용해주세요!!

 

CarComponent.java

1
2
3
4
5
6
7
8
import dagger.Component;
 
@Component(modules = CarModule.class)
public interface CarComponent {
    void inject(MainActivity mainActivity);
 
}
cs

 

4. 마지막으로 메인 액티비티에서 사용을 하면 됩니다.  하지만!!!!!!

 

그냥 사용하시면 이렇게 빨간줄이 뜹니다. 이유는 빌드를 안 해줘서 아직 DaggerCarComponent.java 가 아직 만들어지지 않아서 그렇습니다.

 

그래서 꼭 리빌드 프로젝트를 해주셔야됩니다. !!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        CarComponent carComponent = DaggerCarComponent.builder()
                .carModule(new CarModule())
                .build();
 
        carComponent.inject(this);
 
 
    }
}
 
cs

이렇게 하고 

 

 

5. 마지막으로 Inject로 변수만 생성해주면 됩니다. (객체 선언은 할 필요가 없어요~~) 

 

 

이렇게 잘 사용이 되는 것을 확인할 수 있어요~~ 모두 고생하셨습니다~~~

'안드로이드 > Dagger2' 카테고리의 다른 글

[Android Dagger2] 의존성 주입의 필요성(DI)  (0) 2021.07.12
Comments