개발/안드로이드2024. 8. 7. 15:50[Hilt] Hilt의 API 활용 및 예제 (2)

Custom 컴포넌트 만들기커스텀 컴포넌트란, 사용자가 정의한 컴포넌트로 표준 컴포넌트 하위에 위치시킬 수 있다 1. Custom 컴포넌트 정의하기@DefineComponent(parent = SingletonComponent::class)interface MyCustomComponent 인터페이스를 선언하고 @DefineCompoent 애노테이션을 사용한다. 2. Custom 컴포넌트 빌더 정의하기@DefineComponent.Builderinterface MyCustomComponentBuilder { fun setFoo(foo: Foo): MyCustomComponentBuilder fun build(): MyCustomComponent} 컴포넌트를 만들기 위한 컴포넌트 빌더를 만든다.D..

[Hilt] Hilt의 API 활용 및 예제 (1)
개발/안드로이드2024. 8. 6. 18:56[Hilt] Hilt의 API 활용 및 예제 (1)

ViewModel안드로이드에서 뷰모델을 사용하는 이유는 애플리케이션에서 상태를 유지하기 위함이다. 상태(State)라는 것은 간단하게 말하자면 시스템에 정보가 기억되는 것을 의미한다. 안드로이드는 PC 운영체제와 비교하여 상대적으로 낮은 사양에서도 애플리케이션이 원활히 실행될 수 있도록 설계된다. 그렇기에 필요없다 판단되는 것들은 전부 종료하여 메모리를 확보한다. 이 과정에서 액티비티와 같은 안드로이드 컴포넌트들이 수명주기에 따라 파괴되기도 한다. 대표적으로 구성변경이 발생할때다. 예) 화면 회전, 화면 크기 변경, 라이트/다크 모드 변경 등등 화면 회전의 경우, 액티비티가 파괴되고 다시 onCreate되며 재생성된다. 액티비티 인스턴스 내 레퍼런스되고 있던 모든 객체들이 GC 대상이 된다. 예외적으로 ..

[Hilt] Hilt의 바인딩
개발/안드로이드2024. 8. 5. 17:02[Hilt] Hilt의 바인딩

Qualifier 활용Hilt는 타입으로 의존성을 구분한다. 타입이 명시되어있기 때문에 타입으로 구분하여 의존성을 바인딩하고 주입하는 것이 가능하다. 그런데 동일한 타입이 두 번 바인딩 된다면?  Hilt 입장에선 Client에서 의존성을 요청할때 어떤 바인딩을 주입해야할지 애매해질 것이다  그렇기에 컴파일 타임에 중복 바인딩 에러를 띄우게 된다. 이러한 양상의 오류가 발생할 경우 중복된 바인딩 요소를 제거하면 간단히 해결된다. 그러나 중복바인딩을 하고 싶을 수도 있다. 이 해결방법의 핵심이 @Qualifier 애노테이션이다. 1. 커스텀 Qualifier 선언Qualifier를 애노테이션으로 갖는 새로운 애노테이션을 선언해야한다. 실제 프로젝트 진행 시 필요하다면 상황에 맞게 Qualifier를 선어하..

개발/안드로이드2024. 8. 2. 16:13[Hilt] AndroidEntryPoint의 이해와 Hilt 모듈, 바인딩

AndroidEntryPoint의 이해Dagger에서 말하는 Component는 의존성을 관리하는 컨테이너를 말한다. SubComponent는 어떤 컴포넌트의 하위에 속하는 컴포넌트를 일컫는다. SubComponent의 하위에 있는 또다른 컴포넌트 또한 SubComponent이다. 그렇기에 엄밀히 따지면 Hilt에서 말하는 Component는 Singleton Component 하나 뿐이다. 나머지는 전부 SubComponent이다. Dagger에서는 여러 컴포넌트를 정의하고 인스턴스화 하는게 가능하지만, Hilt에서는 표준 컴포넌트를 사용하고 그것들이 계층을 이루고 있으므로 엄밀히 따지면 Singleton Component만 컴포넌트라고 할 수 있다는 것이다. Hilt에서 SubComponent를 인스..

[Hilt] Hilt의 표준 컴포넌트를 살펴보자
개발/안드로이드2024. 8. 2. 15:26[Hilt] Hilt의 표준 컴포넌트를 살펴보자

기존 Dagger와는 다르게 표준 컴포넌트를 제공하기 때문에 개발자가 따로 커스텀 컴포넌트를 만들 필요는 없다.물론 커스텀 컴포넌트를 정의하는 방법은 있으나 일반적이진 않으며 권장하지 않는 방법이다. Dagger와 달리 표준 컴포넌트 조차 소스 코드내에서 인스턴스화 하지 않는다. 컴포넌트 계층 이미지에서 볼 수 있는 각 컴포넌트 명칭 위의 스코프 애노테이션은 해당 컴포넌트의 생명주기에 대한 의존성 범위를 지정할때 사용되는 애노테이션이다. 컴포넌트간 화살표 방향은 하위 컴포넌트를 가르키는 것이다. 일반적으로 하위 컴포넌트는 상위 컴포넌트의 바인딩에 접근할 수 있다. 하지만 역방향으로는 불가능하다. 예를들어, FragmentComponent에서 ActivityComponent의 의존성으로 접근하는 것은 가능..

[Hilt] Hilt 내부 동작의 이해
개발/안드로이드2024. 8. 1. 16:50[Hilt] Hilt 내부 동작의 이해

애노테이션은 여러가지 속성을 가질 수 있다. 정의된 애노테이션은 클래스에 마킹할 수 있다. 뿐만아니라 필드 메서드 파라미터 등에서도 선택적으로 사용가능하다. 안드로이드에서 많이 사용해본 표준 애노테이션으로 @Override @Non-null 등이 있을 것이다. Hilt의 주요 Annotation의 종류@HiltAndroidApp@AndroidEntryPoint@Module@InstallIn@HiltViewModel 애노테이션의 특징JDK 1.5부터 추가자바(또는 코틀린) 소스코드에 추가하는 메타데이터컴파일러에게 부가정보 제공클래스, 필드, 메서드 및 기타 요소에 선택적으로 선언 가능런타임에서도 참조 가능애노테이션의 목적은 소스코드를 해치지 않으면서 컴파일러에게 부가정보를 제공하기 위해 추가되었다. Ann..

[Hilt] Hilt 의존성 주입 기초 예제로 살펴보기
개발/안드로이드2024. 8. 1. 16:11[Hilt] Hilt 의존성 주입 기초 예제로 살펴보기

import android.app.Applicationimport dagger.hilt.android.HiltAndroidApp@HiltAndroidAppclass App: Application() {} Hilt의 출발점은 @HiltAndroidApp 애노테이션으로부터 시작된다.이 애노테이션은 애플리케이션 클래스에 마킹하고 빌드하면 기본적인 설정이 끝난다.빌드 이후, 싱글톤 컴포넌트(Container)가 자동적으로 생성된다.  이 싱글톤 컴포넌트에 의존성을 추가할 수 있다.생성자 바인드, 모듈의 프로바이드 어노테이션을 통한 바인딩 기법 두 가지가 존재한다.컴포넌트에 의존성을 추가하는 것을 바인딩, 바인딩을 한다고 표현한다.클라이언트는 컴포넌트에 바인딩된 의존성들을 요청할 수 있다. @AndroidEntr..

[Hilt] Android에서 Hilt란? (24-07-31 내용 보충)
개발/안드로이드2024. 7. 31. 16:57[Hilt] Android에서 Hilt란? (24-07-31 내용 보충)

Hilt란? 프로젝트에서 종속 항목 수동 삽입을 실행하는 상용구를 줄이는 Andorid용 종속 항목 삽입 라이브러리이다. 종속 항목 삽입(DI)를 실행하려면 모든 클래스와 종속 항목을 수동으로 구성하고 컨테이너를 사용하여 종속 항목을 재사용 및 관리해야 한다. Hilt는 프로젝트의 모든 Android 클래스에 컨테이너를 제공하고 수명 주기를 자동으로 관리함으로써 애플리케이션에서 DI를 사용하는 표준 방법을 제공한다. Google의 Dagger를 기반으로 빌드되었기 때문에 Dagger가 누리는 이점인 컴파일 시간 정확성, 런타임 성능, 확장성 및 Android Studio 지원을 누릴 수 있다. Hilt의 등장 배경Hilt 이전에는 개인이나 회사별로 수동으로 별도의 DI 솔루션을 만들어서 사용했다. 널리 ..

[Hilt] 기존 프로젝트에 Hilt 적용해보기
개발/안드로이드2024. 7. 26. 19:02[Hilt] 기존 프로젝트에 Hilt 적용해보기

https://developer.android.com/codelabs/basic-android-kotlin-compose-practice-bus-schedule-app?hl=ko&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-compose-unit-6-pathway-2%3Fhl%3Dko%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-compose-practice-bus-schedule-app#0 연습: Bus Schedule 앱 빌드  |  Android DevelopersRoom을 사용하여 데이터 유지 Co..

image