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