정상에서 IT를 외치다

[Android, Dagger2] Dagger2 사용 예제 - 1 본문

안드로이드

[Android, Dagger2] Dagger2 사용 예제 - 1

Black-Jin 2018. 10. 4. 11:47
반응형


안녕하세요. 지난 Di 기본 개념과 Dagger2 사용 예제에 이은 두번째 포스팅을 시작하겠습니다.

이번에는 Module 2개를 사용한 예제를 통해 Dagger2 사용 법에 한발 짝 다가가 보겠습니다



요리 주문을 받아 만들기



1, 셰프와 주방 생성


요리를 만들기 위해서는 셰프와 주방이 필요힙니다

public class Chef {

private String firstName;
private String lastName;

public Chef(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

@Override
public String toString() {
return "Chef [firstName=" + firstName + ", lastName=" + lastName + "]";
}
}

public class Kitchen {

private Chef chef;
private String order;

public Kitchen(Chef chef, String order) {

this.chef = chef;
this.order = order;
}

public boolean isOrder() {

if (chef !=null && order!=null && order.length()>0) {
Log.d("MyTag","Chef: " + chef + " order: " + order);
return true;
}
return false;
}
}

주방에서는 주문을 받았는지 여부를 파악하여 Boolean 값을 리턴하는 함수인 isOrder() 있습니다.



2. Module 설정

@Module
public class ChefModule {

@Provides
Chef provideChef() {
return new Chef("Black","Jin");
}
}

@Module
public class KitchenModule {

@Provides
Kitchen provideIsOrder(Chef chef, @Named("course1") String order) {
return new Kitchen(chef, order);
}

@Provides
@Named("course1")
String provideCourse1() {
return "한식";
}

@Provides
@Named("course2")
String provideCourse2() {
return "중식";
}
}

2개의 모듈을 만들었습니다.

특히 KitchenModule 에서는 @Provides 로 공급할 때 Named 를 설정하여 공급 객체를 구분 할 수 있습니다.

코스요리1 과 코스요리2 로 2가지 Named 를 설정하였습니다.



3. Component

@Component(modules = {ChefModule.class, KitchenModule.class})
public interface MyComponent {

void inject(MainActivity activity);
}

2개의 모듈을 주입 할 곳은 MainActivity 입니다.



4. MainActivity

public class MainActivity extends AppCompatActivity {

@Inject
Kitchen kitchen;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MyComponent myComponent = DaggerMyComponent.builder().build();
myComponent.inject(this);

isOrder();

}

private void isOrder() {
boolean isOrder = kitchen.isOrder();
if (isOrder) {
Log.d("MyTag","order successful. ");
} else {
Log.d("MyTag","order failed. ");
}
}

}

1) 주입 받는 놈 Kitchen 을 변수에 선언하였습니다.

2) Component 를 build 하게 되면 kitchen 에 자동으로 객체가 주입됩니다.

3) KItchenModule 에서 course1 (한식) 을 주입했으므로 BlackJin 셰프가 한식 요리를 하게 됩니다.



<참고 사이트>

Using Dagger 2




반응형
Comments