DI
DI(Dependency Injection) 정리 (hilt, koin)
olivia
2022. 6. 28. 21:46
의존성 주입 (Dependency Injection)
개념
- 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 필요한 객체를 받아서 사용하는 것이다.
효과
- 객체간의 결합도를 줄이고 코드의 재활용성을 높여준다
DI 프레임 워크 종류
koin
- 특징
- runtime error 발생 (컴파일 과정을 마친 후 사용자에 의해 실행되어 짐) 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생
- kotlin DSL로 만들어진 안드로이드에서 사용할 수 있는 의존성 주입 라이브러리
- AAC ViewModel 사용 시 별도의 라이브러리를 통해 의존성 주입이 가능
- Dagger에 비해 복잡하지 않아 러닝 커브가 낮지만 리플렉션을 이용해 의존성을 주입하다 보이 앱 성능이 저하됨
- 장점
- 러닝커브가 낮음
- Kotlin 개발 환경에 도입하기 쉬움
- 별도의 어노테이션을 사용하지 않기 때문에 컴파일 시간 단축
- ViewModel 주입을 쉽게 할 수 있는 별도의 라이브러리를 제공
- 단점
- 런타임에 서비스 로케이팅을 통 해인 스턴스를 동적으로 주입해주기 때문에 런타임 퍼포먼스가 떨어짐
- 리플렉션을 이용해 의존성을 주입하다 보이 앱 성능이 저하됨
hilt
- compile error 발생(개발자가 작성한 언어를 컴퓨터가 인식할 수 있게 기계어 코드로 변환)
- 코드 관리에 유용 (module 생성이 필요 없음)
- 안드로이드 클래스에 생명주기를 고려하여 의존성을 주입할 수 있는 라이브러리
- Dagger를 사용하여 구현현하므로 보일러 플레이트 코드를 줄여줌
비교
Dagger2 | Koin | Hilt | |
러닝커브 | 높음 | 낮음 | 낮음 |
Java | O | X | O |
Kotlin | O | O | O |
에러 검출 시점 | Compile Time | Runtime | Compile Time |
실제 프로젝트 검증 | 많은 앱에서 검증됨 | 많은 앱에서 검증됨 | beta버전(조금씩 보임) |