Hilt는 Android 애플리케이션에서 의존성 주입을 간소화하는 강력한 라이브러리입니다. 이 글에서는 Hilt의 내부 동작 원리를 심층적으로 살펴보고, 그 핵심 기술인 Annotation Processer과 바이트코드 변조에 대해 자세히 알아보겠습니다.
Hilt의 구조
Hilt는 크게 세 가지 주요 구성 요소로 이루어져 있습니다:
- Annotation:
@HiltAndroidApp
, @AndroidEntryPoint
, @Inject
등
- 컴파일 타임 코드 생성: Annotation Processer를 통한 자동 코드 생성
- 런타임 라이브러리: 생성된 코드와 함께 작동하는 런타임 컴포넌트
Annotation 과 Annotation Processe
Annotation의 역할
Annotation Processer는 컴파일 시간에 에노테이션을 스캔하고 처리하는 도구로 Annotation Java 5부터 도입된 기능입니다.
에노테이션 프로세서의 동작
에노테이션 프로세서는 컴파일 타임에 작동하며, 다음과 같은 과정을 거칩니다:
- 소스 코드에서 Hilt 관련 Annotation 탐색
- Annotation 정보 분석 및 의존성 구조 파악
- 필요한 의존성 주입 코드 생성
- 컴파일 시 오류 검출 (예: 순환 의존성)
어노테이션 처리 과정
- 초기화: 컴파일러가 에노테이션 프로세서를 초기화합니다.
- 라운드 처리:
a. 에노테이션 스캔: 현재 라운드에서 처리할 에노테이션을 찾습니다.
b. 프로세서 실행: 각 에노테이션에 대해 해당 프로세서를 실행합니다.
c. 코드 생성: 필요한 경우 새로운 소스 파일을 생성합니다.
- 다음 라운드 준비: 새로 생성된 소스 파일이 있다면, 다음 라운드를 위해 준비합니다.