Hilt는 Android 애플리케이션에서 의존성 주입을 간소화하는 강력한 라이브러리입니다. 이 글에서는 Hilt의 내부 동작 원리를 심층적으로 살펴보고, 그 핵심 기술인 Annotation Processer과 바이트코드 변조에 대해 자세히 알아보겠습니다.

Hilt의 구조

Hilt는 크게 세 가지 주요 구성 요소로 이루어져 있습니다:

  1. Annotation: @HiltAndroidApp, @AndroidEntryPoint, @Inject
  2. 컴파일 타임 코드 생성: Annotation Processer를 통한 자동 코드 생성
  3. 런타임 라이브러리: 생성된 코드와 함께 작동하는 런타임 컴포넌트

Annotation 과 Annotation Processe

Annotation의 역할

Annotation Processer는 컴파일 시간에 에노테이션을 스캔하고 처리하는 도구로 Annotation Java 5부터 도입된 기능입니다.

에노테이션 프로세서의 동작

에노테이션 프로세서는 컴파일 타임에 작동하며, 다음과 같은 과정을 거칩니다:

  1. 소스 코드에서 Hilt 관련 Annotation 탐색
  2. Annotation 정보 분석 및 의존성 구조 파악
  3. 필요한 의존성 주입 코드 생성
  4. 컴파일 시 오류 검출 (예: 순환 의존성)

어노테이션 처리 과정

  1. 초기화: 컴파일러가 에노테이션 프로세서를 초기화합니다.
  2. 라운드 처리: a. 에노테이션 스캔: 현재 라운드에서 처리할 에노테이션을 찾습니다. b. 프로세서 실행: 각 에노테이션에 대해 해당 프로세서를 실행합니다. c. 코드 생성: 필요한 경우 새로운 소스 파일을 생성합니다.
  3. 다음 라운드 준비: 새로 생성된 소스 파일이 있다면, 다음 라운드를 위해 준비합니다.