Hilt와 Koin의 비교
Dagger2의 경우 적용을 위해 환경을 세팅하는 과정이나 학습에 있어서 러닝커브가 크다. 이로 인해 Dagger2 보다 러닝 커브는 낮지만 Dagger를 기반으로 만들어진 Hilt를 많이 사용하고 있다. 또한 안드로이드 개발시 Kotlin 만을 사용한 프로젝트들이 많아지고 있어 Koin 또한 많이 사용하고 있다.
그래서! Hilt와 Koin 중 어떤 것을 프로젝트에 사용하는 것이 더 좋을지 이 둘의 장단점과 차이에 대해 비교해보자.
먼저, 각각의 장단점에 대해 알아보자.
1) Koin - 장점
- Dagger2나 Hilt 에 비해 러닝커브가 낮다.
- Koin의 경우 Kotlin DSL로 만들어져 Kotlin 개발 환경에 도입이 쉽다.
- 어노테이션을 사용하지 않아 컴파일 시간이 단축됨. → 어노테이션 프로세서의 경우 컴파일시간에 발생하기 때문에!!
2) Koin - 단점
- 런타임 시에 서비스 로케이팅 방식을 통해 인스턴스를 동적으로 주입해주기 때문에 런타임 성능이 떨어진다.
- 마찬가지로 런타임시에 주입이 이루어져, 언제 오류가 날지 정확하게 알 수 없어 앱의 안정성이 떨어진다.
- koin.get() 사용시 의존 관계 파악이 어려워 멀티 모듈 사용시 문제가 된다.
- 자바의 리플렉션을 이용하기 때문에 성능 상 좋지 않음. → 리플렉션은 속도를 저하시키기 때문에 구글에서 권장하지 않음.
3) Hilt - 장점
- Dagger에 비해 적은 코드
- Hilt는 Dagger와 달리 모듈 하나만 생성하면 되고, Component는 안드로이드 클래스 단위로 사전에 생성되어 있어 Annotation으로 쉽게 설정할 수 있다.
- 안드로이드 클래스 최적화
- Application, Activity, Fragment, ViewModel, View, Service 등 안드로이드 클래스에 최적화 되어 있음.
- LifeCycle 관리
- 안드로이드 클래스에 최적화된 Hilt는 각 클래스의 생명주기에 따라 구성요소의 인스턴스를 생성 및 제거 해줌.
- 컴파일 타임에 주입에 대한 검증을 마치고, 어플리케이션 시작 시 단 한번에 주입이 이뤄지기 때문에 오류에 대해 미리 반응할 수 있다.
4) Hilt - 단점
- 러닝커브가 Koin에 비해 높다. 써야 할 것이나 배워야 할 것이 훨씬 많음!
- KAPT를 통해 Java Stub 파일을 생성해 주입을 위한 보일러플레이트 코드를 생성한다. 또한 빌드 시간이 늘어난다.
5) 비교 정리
위의 그림과 같이 Hilt의 경우 Compile 타임에 주입해주고, Koin의 경우 Runtime에 주입해준다.
주입 시간에 따른 차이로 Koin의 경우 잘못된 코드로 작성했을 경우, 오류를 잡기가 힘들고 오류를 놓쳤을 때의 불안함이 있다. 하지만 Hilt에 경우 초기부터 오류가 발생하기 때문에 정확하게 오류를 잡아갈 수 있다.
결국 Koin이 Hilt보다 러닝커브가 낮고, 코드도 간단하기 때문에 프로젝트 크기 등을 고려하여 유동적으로 어떤 것을 사용할지 결정하는 것이 좋아보인다!
참고자료
https://goodbegunishalfdone.tistory.com/entry/Android-DI-Hilt-vs-koin-%EB%B9%84%EA%B5%90-1
[Android] DI - Hilt vs koin 비교 (1)
최근에 새로운 프로젝트를 진행하면서 잠시 놓고 있었던 안드로이드를 계속해서 복습하고 있다. 오늘은 Hilt에 대해 복습하기 전에 왜 내가 koin에서 Hilt로 옮겼는지에 대해 기억을 더듬어봤고,
goodbegunishalfdone.tistory.com
'Android > Hilt' 카테고리의 다른 글
[Hilt] Hilt의 Componet와 Scope (2) | 2024.11.11 |
---|---|
[Hilt] 프로젝트에 의존성 주입(DI) 적용해보기 - Hilt + Retrofit (0) | 2023.06.27 |
[Hilt] Dagger Hilt로 안드로이드 의존성 주입하기 (0) | 2023.06.25 |