분류 전체보기

지금까지는 하나의 컴포넌트만 사용하였다. 하지만, 안드로이드 프레임워크 같은 곳에서는 여러 컴포넌트들 간에 의존 관계가 필수적이다. 어플리케이션은 여러 액티비티(Activity)를 포함하며, 각 액티비티는 여러 프레그먼트(Fragment)를 포함할 수 있다. 즉, 각 Component들은 의존 관계가 생긴다. 따라서 의존 관계가 있는 컴포넌트는 상위 컴포넌트에 대한 참조를 포함해야 한다. Dagger2에서는 이를 위해 모듈에 포함할 수 있고, 상위 프로바이더를 사용할 수 있는 서프컴포넌트를 제공한다. 서브 컴포넌트(SubComponent) 서브 컴포넌트란 어떤 컴포넌트의 하위에 포함되는 컴포넌트를 뜻한다. 정확히는 모듈 내부에 포함되는데, 이를 통해 해당 서브컴포넌트는 부모 모듈과 컴포넌트의 프로바이더를..
예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제7,8,9과 함께 한다. Scope란? Dagger2의 역할은 외부에서 의존성을 주입해주는 것이다. 여기서 문제점이 생긴다. 외부(Container)에서 제공하는 인스턴스들이 한 번만 생성되어도 되는데 호출할 때마다 생성된다면 불필요한 메모리 사용이 생긴다. Dagger2에서는 이를 해결하기 위해 Scope Annotation을 이용해 같은 범위(Scope)의 내에서 객체들을 관리하게 된다. Scope Annotation이 적용된 Provider은 범위(Scope) 내에서 한 번만 객체를 생성한다. Dagger에서는 Scope Annotation을 이용해 한 번 생성된 객체가 재사용되는 범위(Sc..
예제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) 클래스의 추상(..
Dev.Cho
'분류 전체보기' 카테고리의 글 목록 (84 Page)