본문 바로가기

Kotlin/안드로이드 공부

Koin 의존성 주입

728x90

Spring 개념 공부할 때 들어만 봤던 의존성 주입..! 아직 제대로 된 개념을 몰라서 다시 찾아보려고 한다.

 

의존이란 하나의 클래스가 다른 하나의 클래스에 의존하는 것을 의미한다.

A클래스가 객체를 만들기 위해 B를 필요로 한다면 B는 A의 의존 대상이 된다.

 

의존성 주입이란?

 

 

모델을 내부에서 생성하지 않고 생성자의 인자로

 

자동차 회사는 타이어 회사에 의존한다.

Car 클래스 안에서 매번 Tire 클래스의 객체를 생성해야 Car 클래스의 객체를 만들 수 있다.

하지만 자동차 공장에서 타이어를 만들지 않고 요청 후 받아와 사용하는 경우가 대부분이다.

이렇게 외부의 의존관계가 있는 대상을 가져오는 것을 의존성 주입(DI) 이라고 한다.

 

 

이렇게 외부에서 타이어 객체를 전달하는 행위를 의미하는 것 같다.

 

 

- 컴포넌트 간 결합도 감소

- 코드 재사용성 증가

- 단위 테스트의 편의성 증가 (분리된 코드에 대해서 각각 테스트 및 수정 가능)

- 스코프를 사용하여 객체 관리 가능

 

타이어 뿐만 아니라 자동차는 여러 부품들을 필요로 하기 때문에

굳이 라이브러리를 써서 올바른 순서로 객체를 생성하고 사용하는 것이라고 한다.

 


<안드로이드에서의 DI>

어떤 Activity나 Fragment에서 객체를 생성하냐에 따라 context에 바뀌기 때문에 다르게 동작할 수 있다.

범용된 환경에서 객체를 생성하고 주입받아 사용한다면

context의 영향을 받지 않고 공통으로 재사용할 수 있는 객체를 구현할 수 있다.

 

- 생성자 주입 : 생성자를 통해 의존하는 객체 전달

- 필드 주입: 객체 초기화 후 의존하는 객체 전달

 


 

Dagger2보다 Koin이 더 쉽다고 한다.

주요 키워드들

 

Module : 제공할 객체의 명세

 

Single : 싱글톤. App Lifecycle동안 전역으로 사용 가능한 단일 인스턴스

 

Factory : Single과 반대로 inject시점에 매번 객체를 생성해서 사용

- by inject() : val에만 사용가능. lazy하게 호출 시 생성

- get() : 컴포넌트 내 알맞은 의존성 주입

 

Koin에서 ViewModel을 위한 라이브러리 따로 제공한다. AAC viewmodel -> Koin viewmodel

Activity나 Fragment에 각 ViewModel을 주입

ViewModelProviders.of(this).get(ViewModel::class.java) 대신 사용가능

 

 

<koin 사용법>

1. 모듈 정의 

2. koin 시작

3. 의존성 주입

 

 

 

아직 실제 프로젝트에 적용을 안해서 그런가..

개념은 이해가 가지만 크게 와닿지는 않는다.

 

'Kotlin > 안드로이드 공부' 카테고리의 다른 글

RecyclerView 뽀개기  (0) 2021.01.24
kotlin enum  (0) 2021.01.05
ViewBinding vs DataBinding  (0) 2021.01.04
Google Map API 총정리  (0) 2020.11.04
No Activity found to handle Intent : android.intent.action.VIEW  (0) 2020.09.16