Android/Dependency Injection

    [Koin] 5. single과 factory를 이용한 의존성 주입 비교

    예제 링크 : https://github.com/seyoungcho2/KoinExample 예제 브랜치명 : example/example5 *브랜치 필수 확인 의존성 제공 메서드 single과 factory single은 한 번만 객체를 생성하고 factory는 호출 될때마다 객체를 생성한다. 다음과 같은 Student("student-kim")은 single로 제공되고 Student("student-cho")는 factory로 제공되는 상황을 가정해보자. module { single(named("kim")) { Student("student-kim") } factory(named("cho")) { Student("student-cho") } } 이때 다음과 같이 각각에 대한 의존성을 두 번씩 주입했다고..

    [Koin] 4. get()을 이용하여 생성자에 주입하기

    생성자 주입이 달라야 하는 이유 제공된 객체가 다른 객체의 생성자에 주입되어야 한다고 해보자. class Student(val name: String) class Teacher(val name: String, val teachingStudent: Student) 이럴 경우 Teacher은 Student를 주입받아야 한다. 이때 우리는 다음과 같이 get()을 이용해 제공된 객체를 주입받을 수 있다. single { Student("student-kim") } single { Teacher("teacher-cho", get()) } get()의 역할 예제 링크 : https://github.com/seyoungcho2/KoinExample 예제 브랜치명 : example/example3 *브랜치 필수 확인..

    [Koin] 3. named 메서드를 이용해 같은 Type 객체 구분하기

    예제 링크 : https://github.com/seyoungcho2/KoinExample 예제 브랜치명 : example/example2 *브랜치 필수 확인 seyoungcho2/KoinExample Koin Usage Example. Contribute to seyoungcho2/KoinExample development by creating an account on GitHub. github.com 같은 Type의 객체 여러개 주입 시 문제점 같은 타입의 객체가 두개이 이상이면 어떤 객체를 주입해야 할지 구분하는데 문제가 생긴다. 예를 들어 아래와 같은 주입을 한다고 해보자 class MainActivity : AppCompatActivity() { override fun onCreate(saved..

    [Koin] 2. Koin을 이용한 의존성 주입

    이 글을 이해하기 위해서는 의존성 주입에 대한 이해가 필수적이다. 의존성주입에 관해 모른다면 아래 글을 읽고 오도록 하자. 의존성 주입이란 무엇이며 왜 필요한가? 목표 의존성 주입이 무엇인지 이해한다. 의존성 주입이 왜 필요한지 이해한다. 의존성 주입이란? 의존성 주입이란 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻한다. 더 자세하게는 kotlinworld.com Koin과 의존성 주입의 구성요소 의존성 주입에는 주입할 객체를 저장하는 Container, 주입할 객체가 필요하다. Koin에서는 여기에 하나를 더해 주입할 객체를 모아놓은 모듈을 만들어내었다. 따라서 Network를 위한 객체들은 Network Module에 모아지고, Database를 위한 객체들을 Database Module에 모..

    [Koin] 1. Koin 이란? + 안드로이드 개발 환경 세팅

    Koin이란 Kotlin으로 DI를 공부하면서 가장 먼저 접하는 라이브러리는 Kotlin DSL로 만들어진 Koin이다. Kotlin DSL로 만들어졌다보니 Kotlin에 익숙한 개발자라면 사용하기 어렵지 않으며, Koin은 Dagger에 비해 구성요소가 복잡하지 않아서 Koin을 배우는 것은 러닝 커브가 낮다고 한다. 하지만 Koin은 리플렉션을 이용해 런타임에 오브젝트 그래프를 그려주다보니(=의존성 주입을 하다보니) 앱 성능이 저하된다는 단점이 있다. 따라서, 큰 규모의 프로젝트에서 Koin을 사용할 경우 Application이 시작될 때 의존성 그래프가 그려지다 보니 화면이 멈춘것처럼 될 수 있다. 따라서 큰 규모의 프로젝트에서는 컴파일 타임에 의존성 그래프를 그려주는 Dagger-Hilt을 이용해..