일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프래그먼트
- 아비투스
- 슬기로운 온라인 게임
- 커스텀린트
- 테트리스
- 지지않는다는말
- 자취필수템
- 소프시스 밤부 좌식 엑슬 테이블
- 목적중심리더십
- 안드로이드
- T자형인재
- 면접
- 캐치마인드
- 소프시스
- 한달브런치북만들기
- 리얼하다
- 한달어스
- 목적 중심 리더십
- 끝말잇기
- 1일1커밋
- 베드트레이
- 한달독서
- 북한살둘레길
- 브런치작가되기
- 한단어의힘
- 베드테이블
- 어떻게 나답게 살 것인가
- 함수형 프로그래밍
- 좌식테이블
- 재택근무
- Today
- Total
정상에서 IT를 외치다
[Android, Dagger2] Dagger2 사용 예제 - 1 본문
안녕하세요. 지난 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 셰프가 한식 요리를 하게 됩니다.
<참고 사이트>
'안드로이드' 카테고리의 다른 글
[Android, Test ] UnitTest, UiTest 기본 예제 (1) | 2018.10.05 |
---|---|
[Android, Dagger2] Dagger2 사용 예제 - 2. SharedPref (0) | 2018.10.04 |
[Android, Dagger2] DI 기본 개념과 Dagger2 사용 예제 - 놈!놈!놈! (6) | 2018.10.01 |
[Android, ItemDecoration] 리사이클러뷰에 아이템데코레이션 사용하기 (2) | 2018.09.19 |
[Android, RecyclerView] 리사이클러뷰 레이아웃 매니저 종류 (2) | 2018.09.18 |