-
[안드로이드] 의존성 주입(Dependency Injection) Dagger2, Hilt, Koin 장단점개발/Android 2022. 10. 26. 15:50
의존성 주입 이란?
간단히 말하여 외부에서 생성자를 통하여 객체를 전달받는 상황을 말한다.
예로들면
//ApiService 라는 객체를 주입 받음 class RemoteDataSourceImpl (val apiService: ApiService) : RemoteDataSource { }
사용 이유?
의존성 주입을 받으면 클래스간 결합도가 약해진다.
결합도가 약해지면 한 클래스가 변경이 되어도 다른 클래스에 영향을 끼칠 경우가 적어진다.
- 결합도가 약해짐에 따라 유지보수에 용이 하고 리펙토링에 이점이 있음
- 클래스별 테스트에 용이
- 인터페이스 기반으로 확장에 용이
- 보일러 플레이트 코드 감소
등등등...
Dagger2, Hilt, Koin
대표적인 DI 프레임워크로서 각각의 장단점을 정리
Dagger2
장점!
- 컴파일 단계에 DI 생성하여 런타임 성능 좋음
- 자원 공유의 단순화
단점
- 러닝커브가 높다.
- 컴파일 시간 증대
Hilt
장점!
- 낮은 러닝커브로 빠르게 적용가능
- 어노테이션 편함
- 보일러플레이트 코드 감소
- 컴파일시 에러검출 가능
단점
- 기존 프로젝트에 적용시 마이그레이션 필요
Koin
장점!
- 낮은 러닝커브로 빠르게 적용 가능
- 어노테이션을 사용하지 않아 컴파일 단축
단점
- 의존 관계 파악이 어려움
- 컴포넌트가 없어도 컴파일 단계에서 검출안됨 런타임시 에러발생
- 런타임 성능이 좋지 못함
'개발 > Android' 카테고리의 다른 글
[안드로이드] Kotlin 확장 함수(Extension functions), 확장 프로퍼티 (0) 2022.10.14 [안드로이드]레이아웃 자동 애니메이션 처리 animateLayoutChanges (0) 2022.10.14 [안드로이드] Android Application Class 적용 (0) 2021.12.17 [안드로이드] Bottom Sheet Dialog Fragment 생성시 fullScreen 적용 (0) 2021.12.17 안드로이드10 open failed: EACCES (Permission denied) 해결 (0) 2020.11.04