개발/Android

[안드로이드] 의존성 주입(Dependency Injection) Dagger2, Hilt, Koin 장단점

라보떼 2022. 10. 26. 15:50

 

의존성 주입 이란?

간단히 말하여 외부에서 생성자를 통하여 객체를 전달받는 상황을 말한다.

 

 

예로들면

//ApiService 라는 객체를 주입 받음
class RemoteDataSourceImpl (val apiService: ApiService) : RemoteDataSource {
        
}

 

사용 이유?

의존성 주입을 받으면 클래스간 결합도가 약해진다. 

결합도가 약해지면 한 클래스가 변경이 되어도 다른 클래스에 영향을 끼칠 경우가 적어진다.

  • 결합도가 약해짐에 따라 유지보수에 용이 하고 리펙토링에 이점이 있음
  • 클래스별 테스트에 용이
  • 인터페이스 기반으로 확장에 용이
  • 보일러 플레이트 코드 감소 

등등등...

 

Dagger2,  Hilt, Koin 

대표적인 DI 프레임워크로서 각각의 장단점을 정리 

 

Dagger2

장점!

  • 컴파일 단계에 DI 생성하여 런타임 성능 좋음
  • 자원 공유의 단순화
  •  

단점

  • 러닝커브가 높다.
  • 컴파일 시간 증대

 

Hilt

장점!

  • 낮은 러닝커브로 빠르게 적용가능
  • 어노테이션 편함
  • 보일러플레이트 코드 감소
  • 컴파일시 에러검출 가능

단점

  • 기존 프로젝트에 적용시 마이그레이션 필요

 

Koin

장점!

  • 낮은 러닝커브로 빠르게 적용 가능 
  • 어노테이션을 사용하지 않아 컴파일 단축

단점

  • 의존 관계 파악이 어려움
  • 컴포넌트가 없어도 컴파일 단계에서 검출안됨 런타임시 에러발생
  • 런타임 성능이 좋지 못함