dagger (5) 썸네일형 리스트형 Dagger2 with ViewModel ① 제가 Dagger2 를 공부하여 Android 개발에서 최종적으로 하고싶은 것은 ViewModel(+ UseCase, Repository, DataSource, APIService) 을 직접 생성하지 않고 외부에서 주입받아서 보일러 플레이트 코드를 줄이고 유닛 테스트를 보다 쉽게 작성하기 위함입니다. 하지만 개인적으로 느낀점은 Dagger2 를 통해 ViewModel(정확히는 ViewModel 을 가지고 있는 ViewModelFactory)을 주입해보니 일반적으로 ViewModelProvider 에 ViewModelFactory 를 넘겨서 ViewModel 을 생성하는 방법과 비교해봤을 때 코드의 양은 많이 줄어든 것 같지 않다는 점을 느꼈습니다. ② 예제 코드 Fragment 클래스 - SubCom.. Dagger2 Singleton ① Member-Inject Method 또는 Provision Method 를 호출하면 Dagger 에 의해서 주입되거나 반환될 인스턴스가 매번 새로 생성됩니다. 만약 인스턴스를 매번 생성하지 않고 한번 생성된 인스턴스를 특정 스코프 내에서 계속해서 사용해야 하는 경우에는 @Singleton 어노테이션을 사용해야 합니다. ② @Provides 메서드에 의해 제공되는 인스턴스를 싱글톤 패턴으로 만들기 위해서는 @Provides 어노테이션에 추가로 @Singleton 어노테이션을 붙인 후 해당 모듈이 연결된 Component 에도 @Singleton 어노테이션을 붙여야 합니다. ③ 하나의 ComponentImpl 인스턴스를 통해 싱글톤 인스턴스를 요청할 때는 항상 동일한 인스턴스를 반환해주지만, 같은 Co.. Dagger2 필드 주입 ① 앞의 글에서 작성한 생성자 주입은 특정 객체를 생성할 때 생성자의 매개변수를 통해 객체를 주입하는 것이고, 이번 글에서 작성할 필드 주입은 이미 생성되어있는 객체의 필드에 객체를 주입하기 위해 사용할 수 있는 방법입니다. ② Andorid 에서는 Activity 와 같은 컴포넌트 객체는 개발자가 직접 생성하는 것이 아니라 Android 시스템에서 객체를 생성하여 생명주기를 관리합니다. 그렇기 때문에 Activity 와 같은 Android 컴포넌트에 특정 객체를 주입하기 위해서는 생성자 주입이 아닌 필드 주입을 사용하여야 합니다.(생성자 주입을 하기 위해서는 Dagger 에서 해당 객체를 직접 생성해야 하는데 그것이 불가능하기 때문에) ③ 이 글에서는 Dagger 가 생성한 코드를 기반으로 필드 주입 .. Dagger2 생성자 주입 ① 만약 A 클래스에서 B 클래스의 인스턴스를 생성할 때 생성자에 C 클래스의 인스턴스를 넘겨줘야 한다면 Dagger 의 생성자 주입을 사용하여 자동으로 B 클래스의 생성자에 C 클래스의 인스턴스를 주입할 수 있습니다.(예: MainActivity(A)에서 ViewModel 인스턴스(B)를 생성할 때 생성자에 UseCase 인스턴스(C)를 넣는 것). ② 이 글에서는 Dagger 가 생성한 코드를 기반으로 생성자 주입 시 작업 흐름에 대해 작성하였습니다. ③ 예제 코드는 아래와 같습니다. Component interface @Component(modules = [CarModule::class]) interface CarComponent { fun getCar(): Car } Component 와 연결된 .. Dagger2 시작 Dagger2 는 Dagger 로 용어를 통일하여 작성하였습니다. ① 안드로이드 앱 개발을 공부하다보니 의존성 주입에 대한 이야기를 많이 듣게됩니다. Android Dev Summit 2019 에서 "We believe that you should always apply dependency injection principles to your application" 라고 말할 정도로 앱 개발시 의존성 주입을 사용하는 것을 적극적으로 권장하는 것으로 보입니다. 이 카테고리에서는 여러 블로그에서 가장 많이 언급되는 Dagger 라는 의존성 주입 프레임워크에 대해 공부한 내용을 작성할 예정입니다. (처음 공부하는 것이라 틀린 내용이 포함될 수 있습니다. 틀린 내용은 댓글 남겨주시면 정말 감사드리겠습니다!) ② .. 이전 1 다음