[Dagger] Dagger step4 - Module 초기화
안녕하세요. 블랙진입니다.
이번 포스팅에서는 모듈을 초기화 하는 방법에 대해 살펴보겠습니다. 지난 카페예제에서 카페를 생성할 때 아래와 같은 방법으로 생성했습니다.
@Module
public class CafeModule {
@Singleton
@Provides
CafeInfo provideCafeInfo() {
return new CafeInfo("BlackJin");
}
//...
}
"BlackJin" 이라는 이름의 카페를 고정해서 만들었는데 카페 이름을 대거를 선언할 때 초기화 할 수 있게 수정해 보겠습니다.
1. CafeComponent 수정
빌터 패턴 형식으로 Component 생성시 모듈을 선택하여 넣을 수 있습니다.
@Singleton
@Component(modules = CafeModule.class)
public interface CafeComponent {
//...
@Component.Builder
interface Builder{
Builder cafeModule(CafeModule cafeModule);
CafeComponent build();
}
}
2. CafeModule 생성자 추가
CafeModule에서는 CafeName을 받을 수 있는 생성자를 만들어 줍니다.
@Module
public class CafeModule {
private String cafeName;
public CafeModule(String cafeName) {
this.cafeName = cafeName;
}
@Singleton
@Provides
CafeInfo provideCafeInfo() {
return new CafeInfo(cafeName);
}
//...
}
3. 사용예제
CafeComponent cafe = DaggerCafeComponent.builder()
.cafeModule(new CafeModule("Tistory World"))
.build();
CafeInfo cafeInfo = cafe.cafeInfo();
cafeInfo.welcome();
에제에서 사용한 코드는 깃허브에서 보실 수 있습니다.