오늘은 스탠다드반 과제에 hilt를 적용해봤다.







- data layer의 data model은?
- remoteData → Response
- cacheData → Entity
원래 data layer의 data model이 각각 response와 entity가 되는것 같다!





@Module과 @InstallIn, 그리고 @Provides 어노테이션을 추가하여 바꿔주었다.
@Provides
- 클래스가 외부 라이브러리에서 제공되어 생성자 삽입이 불가능한 경우 사용 (ex. Retrofit, Room)
@Binds
- Interface는 생성자 삽입이 불가능하기에 Interface의 인스턴스를 제공해야 할 때 사용한다.
@HiltAndroidApp
HiltAndroidApp은 Hilt 컴포넌트의 코드 생성과 컴포넌트를 사용하는 Application의 기본 클래스를 생성합니다.
onCreate() 호출 후 Application 필드에 의존성 주입이 이루어진다.
@AndroidEntryPoint
Application에서 멤버 주입이 가능하게 설정하면 안드로이드 클래스에 AndroidEntryPoint 어노테이션을 사용하여 멤버 주입을 해줘야 한다.
- AndroidEntryPoint 사용할 수 있는 타입
- Activity
- Fragment
- View
- Service
- BroadcastReceiver
@InstallIn
Hilt 표준 텀포넌트들 중 어떤 컴포넌트에 모듈을 설치할 지 결정한다. Hilt 컴포넌트가 생성될 때 모듈들은 추가된 InstallIn과 함께 알맞은 컴포넌트, 서브 컴포넌트에 설치한다.
컴포넌트 내 다른 바인딩 또는 하위 컴포넌트에 바인딩이 접근하는 것을 허용한다.
- Hilt는 Annotation 기반으로 동작함.
- Annotation 프로세서는 컴파일 타임에 Annotation을 스캔하고, 소스코드를 검사 또는 생성함.
- 빌드가 완료된 후 프로젝트 소스코드가 자동으로 생성되는 원리가 Annotation 프로세싱으로 인해 생성된 코드임.
- 하나의 Annotation을 처리하는 단계를 round라 부름.
- 몇차례의 round를 거치며 Annotation 프로세서가 코드를 스캔하게됨.

- Interceptor는 해당 네트워크 통신을 하는 중간에 요청과 응답을 보내거나 받거나 간섭하는 역할을 수행하는데 원래 Retrofit의 Header를 사용해도 토큰을 헤더로 보낼 수 있지만 매 API마다 작성해야 하므로 이를 개선하기 위해 InterCeptor를 통해 request시 전달할 수 있다고 한다.
이 Interceptor를 OkHttpClinet에 추가해주고 Retrofit에 client로 등록해주면 일일이 Header에 값을 넣어 줄 필요없이 Interceptor를 통해 전달할 수 있다.
출처: https://velog.io/@jdsaeyqo/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-InterCeptor




