Dagger2란? Dagger2란 Java/Kotlin을 위한 의존성 주입 프레임워크이다. Dagger2에 Hilt를 결합한 버전인 Dagger-Hilt가 대세가 되고 있고, 다른 DI Framework과는 달리 컴파일 타임에 연산을 처리하여 런타임의 성능이 다른 DI Framework에 비해 나으므로 Dagger-Hilt가 대세가 될 것은 명백해 보인다. 하지만 다른 DI Framework들에 비해 새로운 개념이 많이 나와서 러닝커브가 높아 배우는데 시간이 오래 걸려 포기를 하고는 한다. (실제로 내가 Dagger2를 공부하는데도 시간이 오래 걸렸다ㅠ) 나는 공부를 하는데 왜 오래 걸리는지 이유를 찾았고, 그 이유로 명확한 예시가 없다. 설명이 모호하다. 지식이 파편화 되어 있다. 설명이 여러곳에 퍼져..
dagger2
지금까지는 하나의 컴포넌트만 사용하였다. 하지만, 안드로이드 프레임워크 같은 곳에서는 여러 컴포넌트들 간에 의존 관계가 필수적이다. 어플리케이션은 여러 액티비티(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 구성 앞의 ..