바야흐로 Di 주입을 하기 위해 구글에서는 Dagger 라이브러리가 탄생하였고,
여기에서 많은 개발자들의 입에서는 육두문자가 나왔느니,
그래서 탄생한 것이 Hilt 이니라
Hilt의 탄생배경
Hilt는 안드로이드 앱에서 의존성 주입(Dependency Injection)을 관리하기 위한 Jetpack 라이브러리 중 하나입니다. Dagger Hilt는 Dagger와 Jetpack의 기능을 결합하여 안드로이드 앱의 의존성 주입을 단순화하고 개선합니다.
아마 여기서 가장 큰 이유는 Dagger의 학습곡선이 너무나도 높기 때문에 구글측에서도 사용하기 용이하고 단순하게 하기 위해 Hilt를 낸게 아닐까 싶습니다.
그렇다면 의존성 주입이란 무엇인가?
의존성 주입(Dependency Injection)은 객체 지향 프로그래밍에서 중요한 개념 중 하나로 객체 간의 의존성을 외부에서 주입하여 결합도를 낮추고 유연성을 높이는 디자인 패턴입니다.
간단히 말해, 의존성 주입은 한 객체가 다른 객체를 생성하거나 사용할 때, 이를 직접 생성하거나 관리하지 않고, 외부에서 생성된 객체를 주입받아 사용하는 것을 의미합니다. 이를 통해 객체 간의 결합도를 낮추고 코드의 재사용성, 테스트 용이성을 향상시킬 수 있습니다.
- 생성자 주입(Constructor Injection): 객체를 생성할 때 생성자를 통해 의존성을 주입하는 방식입니다. 이는 객체를 생성하는 시점에 모든 의존성을 명시적으로 전달하여 의존성을 해결합니다.
- 메서드 주입(Method Injection): 의존성을 주입할 메서드를 정의하고, 이를 통해 외부에서 의존성을 주입하는 방식입니다. 이는 생성자 주입과는 달리 객체 생성 후에 의존성을 주입할 수 있습니다.
- 속성 주입(Field Injection): 의존성을 주입할 필드를 정의하고, 이를 통해 외부에서 의존성을 주입하는 방식입니다. 이는 생성자나 메서드 주입보다는 덜 권장되는 방식으로, 테스트 용이성이 떨어질 수 있습니다.
사실 의존성 주입의 개념은 헷갈리고 어렵기 때문에 그저 결합도를 낮추기 위해 외부에서 객체를 생성하여 주입받는 것이라고 이해하면 될 것 같습니다.
Hilt의 장점
- 단순성: Hilt는 Dagger의 복잡한 설정을 줄여서 의존성 주입을 보다 쉽게 만듭니다. 특히 Android 컴포넌트와의 통합이 용이합니다.
- 안전성: Hilt는 안드로이드 앱에서 일반적으로 발생하는 실수를 방지하기 위해 컴파일 타임에서 오류를 검출합니다.
- 테스트 용이성: Hilt는 테스트 용이성을 고려하여 설계되었습니다. 모의(Mock) 객체를 쉽게 주입할 수 있고, 테스트하기 쉬운 코드를 작성할 수 있도록 도와줍니다.
- Jetpack 통합: Hilt는 Jetpack 라이브러리와 함께 사용하기 위해 설계되었습니다. 따라서 Jetpack 컴포넌트(예: ViewModel, WorkManager)와의 통합이 원활합니다.
Hilt를 사용하기 위해서는 프로젝트에 Hilt 관련 의존성을 추가하고, 주입할 의존성을 정의하는 모듈을 작성해야 합니다. 이후 Hilt의 어노테이션을 사용하여 의존성 주입을 설정하고, 필요한 곳에서 주입된 의존성을 사용할 수 있습니다.
여기에서 사실 가장 눈에 띄는 장점은 Jetpack와의 통합이지 않을까 싶습니다. 이는 개발자의 수고와 피로를 덜어주기 때문입니다.!!
Hilt의 단점
하나뿐입니다. 초기 셋팅이 복잡하고 어지럽습니다.
Hilt의 핵심개념
- Component: Dagger Hilt에서는 앱의 구성 요소(Component)를 사용하여 의존성을 제공합니다. 이는 Dagger의 컴포넌트와 유사하지만, Hilt에서는 컴포넌트를 생성하기 위한 어노테이션을 사용하여 간단하게 만들 수 있습니다.
- Module: Dagger Hilt는 모듈(Module)을 사용하여 의존성을 제공합니다. 모듈은 앱이나 라이브러리에서 제공하는 의존성을 정의하고 제공하는 역할을 합니다.
- Scope: Hilt는 Dagger의 스코프를 확장하여 앱의 라이프사이클에 따라 의존성을 관리합니다. 예를 들어, @Singleton 어노테이션을 사용하여 앱의 전체 라이프사이클 동안 유지되는 의존성을 정의할 수 있습니다.
- ViewModel Injection: Hilt는 안드로이드의 ViewModel에 대한 의존성 주입을 간편하게 만듭니다. @ViewModelInject 어노테이션을 사용하여 ViewModel을 주입할 수 있습니다.
- Activity 및 Fragment Injection: Hilt는 액티비티와 프래그먼트에 대한 의존성 주입을 자동으로 처리합니다. @AndroidEntryPoint 어노테이션을 사용하여 주입을 활성화할 수 있습니다.
마무리
분명 Hilt는 충분히 매력적이고 상당히 좋은 라이브러리라고 생각이 듭니다.
초기 셋팅이 조금 어렵지 한번 셋팅해두면 유지관리 및 코드관리가 용이함이 느껴집니다.
프로젝트가 클수록 이점이 더 도드라지게 보일 것이라고 생각이 듭니다.
하지만 작은 프로젝트나 웹의 비중이 더 높은 하이브리드의 앱에는 굳이 도입을 하지 않아도 될 듯 하다는 생각이 듭니다.
왜냐하면 계속 말하다싶이 초기셋팅이 너무 피로하기 때문이고 투머치라고 생각이 들기 때문입니다.
'[# 2]…My DevelopStory' 카테고리의 다른 글
[Android Compose] Scaffold Content padding parameter it is not use (0) | 2024.08.26 |
---|---|
[Android Compose] Compose Dagger Hilt 적용하기 (0) | 2024.08.26 |
[Android] Flow에 대하여, Flow란 무엇인가 (0) | 2024.05.08 |
[Android] Keyboard show/hide detect Listener Utile (0) | 2023.06.02 |
[Flutter] Flutter의 미래 전망: 구글이 이끄는 크로스 플랫폼 앱 개발 혁신 (0) | 2023.06.01 |