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버전(조금씩 보임)