예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제7,8,9과 함께 한다. Scope란? Dagger2의 역할은 외부에서 의존성을 주입해주는 것이다. 여기서 문제점이 생긴다. 외부(Container)에서 제공하는 인스턴스들이 한 번만 생성되어도 되는데 호출할 때마다 생성된다면 불필요한 메모리 사용이 생긴다. Dagger2에서는 이를 해결하기 위해 Scope Annotation을 이용해 같은 범위(Scope)의 내에서 객체들을 관리하게 된다. Scope Annotation이 적용된 Provider은 범위(Scope) 내에서 한 번만 객체를 생성한다. Dagger에서는 Scope Annotation을 이용해 한 번 생성된 객체가 재사용되는 범위(Sc..
Android
예제6 예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제 6과 함께 한다. 예제 6의 코드 구조는 다음과 같다. Component와 Component Builder 이전 예제에서 generate된 코드를 보면 다음과 같은 코드가 생성되어 있다. public final class DaggerSchoolComponent implements SchoolComponent { .. public static final class Builder { private Builder() { } public SchoolComponent build() { return new DaggerSchoolComponent(); } } } 별도로 Builder을 설정하지 않아도..
오브젝트 그래프란? 지금까지 우리는 의존성을 외부 Container(Component)에서 설정한 후 실행 시점에 주입시켜 주는 것을 살펴보았다. 이러한 의존성을 제공할 수 있을지 없을지를 표현하는 Component, Module, Provider의 관계를 도표 형태로 나타내는 것을 바로 오브젝트 그래프라 부른다. 의 Object 그래프에서는 우리는 BaseUrl, OkHttpClient, Retrofit, AppDatabase, Dao를 이 Component를 통해 주입받을 수 있음을 알 수 있다. 예제 예제를 다루기 위해 이전 2번 글에서 다루었던 Example을 참조한다. [Dagger2] 2. Dagger2에서 Injection이 일어나는 방식 Dagger2의 IOC Container 구성 앞의 ..
@Binds는 @Provides의 특수한 형태일 뿐이며, @Provides와 같은 역할을 한다. 다른 점은 Binds에는 여러 제약이 있고, 제약이 많은 만큼 코드를 덜 생성한다는 점이다. 지금부터 @Binds에 어떠한 제약이 있는지 어떤 경우에 사용이 되어야 하는지 살펴보자. @Binds @Binds는 하나의 객체를 변수로 받아 해당 변수를 생성(생성자 주입)하고 프로퍼티, 메서드까지 @Inject가 붙은 모든 주입을 처리하고 나서 반환하는 Annotation이다. @Binds는 @Provides와 같은 역할을 하지만, @Provides에 비해 많은 제약이 있어 코드를 덜 생성한다. @Binds를 쓰기 위한 조건으로는 두 개의 필수적인 조건이 있다. @Binds는 추상(abstract) 클래스의 추상(..
같은 타입의 Provider가 있을때 구분 앞서 Provider을 이용해 주입(Inject)가 되는 것을 보았다. 하지만, Provider만 사용하여 주입하는 것에는 문제점이 있다. 바로 Provider에서 제공(Provide)하는 인스턴스의 타입이 같을 때 어떤 인스턴스를 주입해야 하는지 모른다는 것이다. 예를 들어 아래와 같은 Module이 있다고 해보자. @Module class PersonModule { @Provides fun providesStudentName(): String = "StudentA" @Provides fun providesTeacherName(): String = "TeacherB" } 이 모듈에서 제공하는 두가지 Provider의 반환 타입은 모두 String이다. 이 때 ..