이 글을 이해하기 위해서는 의존성 주입에 대한 이해가 필수적이다. 의존성주입에 관해 모른다면 아래 글을 읽고 오도록 하자. 의존성 주입이란 무엇이며 왜 필요한가? 목표 의존성 주입이 무엇인지 이해한다. 의존성 주입이 왜 필요한지 이해한다. 의존성 주입이란? 의존성 주입이란 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻한다. 더 자세하게는 kotlinworld.com Koin과 의존성 주입의 구성요소 의존성 주입에는 주입할 객체를 저장하는 Container, 주입할 객체가 필요하다. Koin에서는 여기에 하나를 더해 주입할 객체를 모아놓은 모듈을 만들어내었다. 따라서 Network를 위한 객체들은 Network Module에 모아지고, Database를 위한 객체들을 Database Module에 모..
의존성 주입
예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제7,8,9과 함께 한다. Scope란? Dagger2의 역할은 외부에서 의존성을 주입해주는 것이다. 여기서 문제점이 생긴다. 외부(Container)에서 제공하는 인스턴스들이 한 번만 생성되어도 되는데 호출할 때마다 생성된다면 불필요한 메모리 사용이 생긴다. Dagger2에서는 이를 해결하기 위해 Scope Annotation을 이용해 같은 범위(Scope)의 내에서 객체들을 관리하게 된다. Scope Annotation이 적용된 Provider은 범위(Scope) 내에서 한 번만 객체를 생성한다. Dagger에서는 Scope Annotation을 이용해 한 번 생성된 객체가 재사용되는 범위(Sc..
@Binds는 @Provides의 특수한 형태일 뿐이며, @Provides와 같은 역할을 한다. 다른 점은 Binds에는 여러 제약이 있고, 제약이 많은 만큼 코드를 덜 생성한다는 점이다. 지금부터 @Binds에 어떠한 제약이 있는지 어떤 경우에 사용이 되어야 하는지 살펴보자. @Binds @Binds는 하나의 객체를 변수로 받아 해당 변수를 생성(생성자 주입)하고 프로퍼티, 메서드까지 @Inject가 붙은 모든 주입을 처리하고 나서 반환하는 Annotation이다. @Binds는 @Provides와 같은 역할을 하지만, @Provides에 비해 많은 제약이 있어 코드를 덜 생성한다. @Binds를 쓰기 위한 조건으로는 두 개의 필수적인 조건이 있다. @Binds는 추상(abstract) 클래스의 추상(..
같은 타입의 Provider가 있을때 구분 앞서 Provider을 이용해 주입(Inject)가 되는 것을 보았다. 하지만, Provider만 사용하여 주입하는 것에는 문제점이 있다. 바로 Provider에서 제공(Provide)하는 인스턴스의 타입이 같을 때 어떤 인스턴스를 주입해야 하는지 모른다는 것이다. 예를 들어 아래와 같은 Module이 있다고 해보자. @Module class PersonModule { @Provides fun providesStudentName(): String = "StudentA" @Provides fun providesTeacherName(): String = "TeacherB" } 이 모듈에서 제공하는 두가지 Provider의 반환 타입은 모두 String이다. 이 때 ..