일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 안드로이드 hilt
- 자바
- 백준 2096
- 2096 파이썬
- 6588 파이썬
- 1806 파이썬
- 백준 10819
- 5582 파이썬
- 1003 파이썬
- 1806 투포인터
- 백준 1644
- 10819 파이썬
- 투포인터 알고리즘
- Jetpack Room
- 1753 다익스트라
- git local remote
- java
- 1644 파이썬
- Android mvp
- android hilt
- 자료구조
- 코루틴 플로우
- 5582 DP
- 1806 백준
- Coroutine Flow
- Android Room
- 1753 파이썬
- 이진 탐색
- flow buffering
- 백준 5582
- Today
- Total
Gemstone's Devlog
[의존성 주입] Hilt 정리 본문
의존성 주입 (Dependency Injection)
의존성 주입이란?
생성자 또는 메서드 등을 통해 외부로부터 생성된 객체를 전달받는 것
의존성 주입의 특징
- 클래스간 결합도를 느슨하게 함
- 인터페이스 기반으로 설계되며, 코드를 유연하게 한다.
- Stub 또는 Mock 객체를 사용하여 단위테스트를 하기가 더욱 쉬워진다.
안드로이드에서 의존성 주입이 어려운 이유?
- Android 클래스가 Framework에 의해 인스턴스화 됨
- Factory를 API28부터 제공, 하지만 현실적이지 않음
Dagger2
Dagger2는 자바와 안드로이드를 위한 강력하고 빠른 의존성 주입 프레임워크
Dagger2의 특징
- 컴파일 타임에 그래프를 구성
- 생성된 코드는 명확하고 디버깅이 가능함
- 리플렉션 사용 X, 런타임 바이트 코드 생성 X
- 자원 공유의 단순화
- 작은 라이브러리 크기
- 상위 10000개의 안드로이드 앱 중 74%가 Dagger를 사용
Dagger2의 단점
- 배우기 어렵고, 프로젝트 설정이 힘들다.
- 간단한 프로그램을 만들 때는 번거롭다.
- 같은 결과에 대한 다양한 방법이 존재한다.
개발자 중 49%가 DI 솔루션 개선을 요청함
의존성 주입 프레임워크의 궁극적인 목표
- 정확한 사용방법을 제안
- 쉬운 설정 방법 (개발자들이 Dagger 대신 Koin 라이브러리를 사용하는 이유)
- 중요한 것들에 집중할 수 있도록 함
Hilt 두둥등장!
Hilt는 애플리케이션에서 DI를 사용하는 표준적인 방법을 제공한다.
Hilt의 목표
- Dagger 사용의 단순화
- 표준화된 컴포넌트 세트와 스코프로 설정과 가독성/이해도 쉽게 만들기
- 쉬운 방법으로 다양한 빌드 타입에 대해 다른 바인딩 제공
Hilt 프로젝트 설정 for Kotlin
Hilt Gradle plugin 설정
Hilt의 특징
- Dagger2 기반의 라이브러리
- 표준화된 Dagger2 사용법을 제시
- 보일러플레이트 코드 감소
- 프로젝트 설정 간소화
- 쉬운 모듈 탐색과 통합
- 개선된 테스트 환경
- Android Studio의 지원
- AndroidX 라이브러리의 호환
Quick Setup
Object graph
Hilt Annotation
주요 Hilt Annotation
- @HiltAndroidApp
- @AndroidEntryPoint
- @InstallIn
- @EntryPoint
@HiltAndroidApp 없이 컴포넌트 생성하기
@HiltAndroidApp
Bytecode transformation
Without the Gradle plugin
@AndroidEntryPoint
@AndroidEntryPoint : 어노테이션이 추가된 안드로이드 클래스에 DI 컨테이너를 추가,
@HiltAndroidApp의 설정 후 사용 가능
@AndroidEntryPoint를 지원하는 타입
- Activity
- Fragment
- View
- Service
- BroadcastReceiver
Hilt Component Hierarchy
Hilt Component 특징
- Dagger와 다르게 직접적으로 인스턴스화 할 필요가 없음
- 표준화된 컴포넌트 세트와 스코프를 제공한다.
- 컴포넌트들은 계층으로 이루어져 있으며,
하위 컴포넌트는 상위 컴포넌트의 의존성에 접근할 수 있다. (=Subcomponent)
Hilt Scope
Scoped Binding
Hilt Scope
Scoped Binding
Hilt Scope
기본 컴포넌트 바인딩
Hilt Module
@InstallIn : Hilt가 생성하는 DI 컨테이너에 어떤 모듈을 사용할 지 가리킨다.
Hilt Module의 제약사항
@Module 클래스에 @InstallIn이 없으면 컴파일 에러!
@EntryPoint
Hilt가 지원하지 않는 클래스에서 의존성이 필요한 경우 사용
(예 : ContentProvider, DFM, Dagger를 사용하지 않는 3rd-party 라이브러리 등)
특징
- @EntryPoint는 인터페이스에서만 사용
- @InstallIn이 반드시 함께 있어야 함
- EntryPoints 클래스의 정적 메서드를 통해 그래프에 접근
@EntryPoint 예제 - ContentProvider
'Kotlin (Android)' 카테고리의 다른 글
GDG Android I/O Extended Korea Android 2022 참가 후기 (0) | 2022.06.11 |
---|---|
Coroutine 정리 (0) | 2022.06.07 |
[코루틴 실습] 처음 만나는 코루틴 (0) | 2022.03.30 |
Coroutine 정리 (0) | 2022.03.28 |
코틀린 코테 테크닉 (0) | 2022.01.21 |