[Android] Dagger Hilt 집중탐구 - 1

김준영·2024년 3월 31일
0

Android

목록 보기
6/17
post-thumbnail

Android의 종속 항목 삽입

종속항목삽입(DI)은 프로그래밍에서 널리 사용되는 기법으로 안드로이드 개발에 적합합니다.

예를들어 Car 클래스는 Engine 클래스 참조가 필요할겁니다. 이처럼 필요한 클래스를 종속항목이라 하며, 이 예에서 Car 클래스가 실행되기 위해선 Engine 클래스의 인스턴스가 필요합니다

그렇다면 Car 클래스가 필요한 Engine 클래스의 객체를 얻는 방법은 어떻게 될까요?

  1. 클래스가 필요한 종속항목 구성, 즉 Car 클래스 자체에서 Engine 인스턴스를 생성 및 초기화
  2. 다른곳에서 객체를 가져온다.
  3. 객체를 매개변수로 제공받는다. 앱은 클래스가 구성될 때 이러한 종속항목을 제공하거나 각 종속 항목이 필요한 함수에 전달할 수 있다. 즉 Car 생성자는 Engine을 매개변수로 받는다

여기서 3번 방법이 종속항목삽입(DI)입니다!
이 방법은 클래스 인스턴스가 자체적으로 종속항목을 얻는 대신 클래스의 종속항목을 받아서 제공합니다

한번 코드로 예시를 볼까요?

class Car {

    private val engine = Engine() // 직접 객체 생성

    fun start() {
        engine.start()
    }
}

fun main(args: Array

위코드는 Car 클래스가 자체적으로 Engine을 구성하기 때문에 DI의 예가 아닙니다 이렇게만 구조가 짜여져있다면 괜찮겠지만 기능이 더 추가된다면 어떻게될까요?

Car와 Engine은 밀접하게 연결되어있습니다. 이것은 추후에 다른 유형의 Engine을 구현하게 될 때 동일한 Car를 재사용하는 대신 두 가지 유형의 Car를 생성해야합니다. 즉 보일러 플레이트 코드가 발생합니다!

종속항목 삽입시 코드를 살펴볼까요?

class Car(private val engine: Engine) {
    fun start() {
        engine.start()
    }
}

fun main(args: Array

아까와 다르게 생성자에 Engine 인스턴스를 받고있죠?
이렇게 되면 둘의 의존도가 확실하게 자유로워졌습니다!
아까와 다르게 어떤점이 좋아졌을까요?

Car의 재사용이 가능합니다! 즉 아까와 다르게 어떤 엔진유형이 오더라도 Car는 추가변경없이도 계속 작동합니다. 아까와 다르게 보일러플레이트 코드를 작성할일이 없겠죠?

DI의 장점 정리

  • 코드재사용 가능
  • 리팩터링 편의성 제공
  • 테스트 편의성 제공

Dagger의 등장

Dagger가 등장하기 이전 다양한 클래스의 종속 항목을 직접 생성, 제공 및 관리했습니다. 이를 종속항목 수동삽입이라 합니다.

이 작업을 수동으로 관리하다 보니, 종속 항목을 전달하기 전에 구성할 수 없을 때(예를 들어 지연초기화를 사용하거나 객체 범위를 앱의 흐름으로 지정하는 경우)는 메모리에서 종속항목의 전체를 관리하는 것도 까다롭고 어려웠습니다.

그래서 Dagger는 이러한 어려움을 극복해주는 라이브러리입니다.
Dagger는 종속항목 그래프를 자동으로 생성하고 관리해 앱의 DI 사용을 용이하게 해줍니다.

Dagger Hilt

Hilt는 안드로이드에서 종속 항목을 삽입하기 위한 Jetpack의 권장라이브러리 입니다.
모든 안드로이드 클래스에 컨테이너를 제공하고 수명주기를 자동으로 관리함으로써 앱에서 DI를 실행하는 표준방법을 정의합니다.

Hilt는 Dagger가 제공하는 컴파일 시간 정확성, 런타임 성능, 확장성 및 안드로이드 스튜디오 지원의 이점을 누리기 위해 인기있는 DI 라이브러리인 Dagger를 기반으로 빌드되었습니다

마치며

Dagger Hilt의 간단한 설명과 필요성에 대해 적었습니다.

Hilt가 다른 DI 라이브러리에 비해 초반 러닝커브가 낮지만 쓰면쓸수록 더 어려워지는 느낌이 들어 다시 처음부터 공식문서를 보며 차근차근 공부하려고 합니다!

다음엔 Hilt의 컨테이너 종속 범위에 대해 집중적으로 공부하고 글을 올려보려합니다

참고 문헌

Android 공식문서

profile
Android, Flutter를 공부하고 있습니다🧐

0개의 댓글

관련 채용 정보