Hilt 기초

Darby·2024년 1월 28일

앱개발 후기

목록 보기
4/4

🗡️Hilt

Hilt는 Dagger를 기반으로 한 Android용 의존성 주입(Dependency Injection) 프레임워크로 입니다.
안드로이드 애플리케이션에서 의존성 주입을 쉽게 구현할 수 있도록 도와주는 도구입니다.


💉DI (Dependency Injection)

의존성 주입(Dependency Injection, DI)은 소프트웨어 개발에서 객체 간의 의존성을 외부에서 주입하는 디자인 패턴입니다. 이를 통해 코드의 유연성과 테스트 용이성이 향상되며, 코드의 결합도를 낮출 수 있습니다.

class Engine {
    fun start() {
        println("Engine started")
    }
}

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

val e = Engine()
val car = Car(e)
car.start()

위와 같이 생성자로 engine을 받아서 사용하면 됩니다.

저는 처음에는 무슨소리인지 잘 모르겠어서 "생성자나 인터페이스 같은 것을 통해 클래스간의 결합도를 낮춘다" 정도로 이해를 하고 넘어갔습니다.

큰 장점은 본인이 생각하기에 2가지가 있는 것 같습니다.

  • 모듈성 및 재사용성: DI를 통해 코드는 모듈로 나눠질 수 있습니다. 각 모듈은 독립적으로 테스트하고 재사용할 수 있게 되어 코드 베이스를 더 쉽게 관리하고 확장할 수 있습니다.

  • 가독성 및 유지보수성: DI는 코드의 가독성을 향상시킵니다. 의존성이 외부에서 주입되기 때문에 코드의 의도가 더 명확해지며, 이는 향후 유지보수에 큰 도움이 됩니다.


Hilt 사용해보기

Hilt는 기존의 Dagger에서 장점을 Android에 LifeCycle에 맞게 Google이 만든 라이브러리입니다. Dagger2 보다 낮은 러닝커브 쉬운 환경설정으로 인해 Android에서 인기가 많은 것 같습니다.

프로젝트에 Hilt를 적용하는 방법은 해당 링크에서 확인해주세요.

class Engine @Inject constructor() {
    fun start() {
        println("Engine started")
    }
}

class Car @Inject constructor(private val engine: Engine) {
    fun start() {
        engine.start()
        println("Car started")
    }
}

의존성이 있는 클래스를 생성

@HiltAndroidApp
class MyApplication : Application()

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Provides
    fun provideEngine(): Engine {
        return Engine()
    }
}

기본 Application에 추가를 해줘야합니다.
Application이 없는 경우 만든 후에 manifest에서 등록을 해주세요.

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var car: Car

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        car.start()
    }
}

위의 코드에서 @HiltAndroidApp 어노테이션이 지정된 MyApplication 클래스는 Hilt의 초기화를 담당합니다. @AndroidEntryPoint 어노테이션이 지정된 MainActivity 클래스에서는 Car 객체를 주입받아 사용합니다.

Hilt는 Android 컴포넌트 (예: Application, Activity, Fragment)에 의존성을 주입하는 데 사용되는 @AndroidEntryPoint 어노테이션과 같은 특별한 어노테이션을 제공합니다.

Hilt에 대한 계층구조와 어노테이션에 대한 건 다음 포스팅에 이어서 올리도록 하겠습니다.


참고자료

Google Document
Medium 블로그

profile
성장하는 개발자가 되자

0개의 댓글