08. Lazy 주입과 Provider 주입 상황에 따른 의존성 주입 시점 늦추기 또는 새로운 객체 요청 Lazy Provider Lazy 주입 객체가 초기화되는 데 시간이 필요한 경우 바인드된 타입 T를 제네릭으로 갖는 Lazy를 만듦. get() 이불리기 전 까지는 초기화 되는것을 늦출 수 있음 import dagger.Component import dagger.Lazy import dagger.Module import dagger.Provides import javax.inject.Inject Lazy 를 dagger 말고 다른 Lazy 를 써서 삽질 좀 했네요. import 주의 합시다 cannot be provided without an @Provides-annotated method. 오류 해..

07. 컴포넌트 바인딩된 모듈로 부터 오브젝트 그래프를 생성하는 핵심적인 역할 @Component 사용 interface, abstract class 에만 붙일 수 있음 컴파일 타임에 'Dagger', @Component가 붙은 클래스 이름이 합쳐진 형식의 이름을 가짐 @Component가 갖는 속성 modules : 컴포넌트에 바인드되는 @Module 이 지정된 클래스 배열 모듈이 다른 모듈을 포함한 경우 해당 모듈까지 컴포넌트에 구현해야함 dependencies : 컴포넌트에 다른 컴포넌트의 의존성을 사용하는 경우 클래스 배열 오브젝트 크래프 Dagger에서는 컴포넌트, 모듈, 객체 등의 관계를 컨테이너 or (오브젝트)그래프 라고 함 [Hello World 예제의 그래프] 컴포넌트 매서드 @Comp..
06. 모듈 컴포넌트에 의존 성을 제공하는 역할 (@Module 이 붙은 클래스) 프로바이더 모듈 클래스 내 메서드에 @Provides 어노테이션을 붙여서 컴파일 타임에 의존성을 제공하는 바인드된 프로바이드를 만들 수 있다 반환 타입을 보게되는데 이때 컴포넌트 내에 중복되는 반환타입이 있으면 안된다. import dagger.Module import dagger.Provides @Module class MyModule { @Provides fun provideHelloWorld(): String = "Hello World" @Provides fun provideSSLee(): String = "Lee Sang Su" // error! } 또는 컴포넌트에 바인드된 메서드의 반환형은 @Provides 메서드..
3. Dagger2란 무엇인가? 자바와 안드로이드를 위한 강력하고 빠른 의존성 주입 프레임워크 특징 리플렉션을 사용하지 않음 (리플렉션 : 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 자바 API) 런 타임에 바이트 코드도 생성하지 않음 컴파일 타임에 애노테이션 프로세서에 의해 의존성 주입과 관련된 모든 코드를 분석하고 자바 소스 코드를 생성 Dagger 전에는 자바 진영에서 Guice를 사용했는데 리플렉션을 사용 및 런 타임에 오브젝트 그래프를 구성하여 성능에 악영향을 끼치는 경우가 많았음 Guice와 비슷한 API를 가지며 더 빠른 Dagger1(2012) 이후 구글 코어 라이브러리 팀과 함께 Dagger2를 만들어 현재까지 발전 프로..
1. 의존성 주입이란? 의존성 주입(DI, Dependency Injection) 하나의 객체의 다른 객체의 의존성을 제공하는 기술 의존성과 주입 의존성 : 객체 지향에서 두 클래스 간의 관계, 일반적으로 둘중 하나가 다른 하나를 필요로함 class CPU class Computer { private val cpu: CPU init { cpu = CPU() } } 위 코드를 보면 컴퓨터를 생성할 떄 CPU가 강하게 결합한다. 다른 CPU로 변경이 불가능 -> 'Computer가 CPU에 의존성을 갖는다' 주입 : 생성자나 메서드를 통해 외부로 부터 생성자 객체를 전달 받는 것 class CPU class Computer { private var cpu: CPU? = null fun setCPU(cpu: ..