[안드로이드 클린 아키텍처 시리즈] UI Layer 구현 1편 (with Hilt) #8

2024. 2. 12. 11:30·안드로이드/클린 아키텍처
반응형

1. 안드로이드 클린 아키텍처 UI Layer 1편

안녕하세요, 지금까지 Data Layer와 Domain Layer에 대해 알아보았습니다. 이번 포스팅부터는 애플리케이션의 가장 전면에 있는 UI Layer를 구현할 차례입니다. UI Layer는 사용자와의 직접적인 상호작용을 담당하며, 사용자 경험을 결정짓는 중요한 역할을 합니다. 먼저, UI Layer의 구현을 위한 첫걸음으로 Hilt를 이용한 의존성 주입에 대해 설명하고 Hilt를 사용하기 위한 기본 세팅을 진행하겠습니다.

UI Layer에서 Hilt 기본 세팅과 관련된 파일
hilt를 사용하기 위한 기본 세팅과 관련된 파일

2. Hilt를 통한 의존성 주입의 필요성

Hilt는 Dagger를 기반으로 한 Android의 의존성 주입 라이브러리입니다. 의존성 주입(Dependency Injection, DI)은 소프트웨어 디자인 패턴 중 하나로, 컴포넌트 간의 결합도를 낮추고, 모듈성을 높이며, 테스트 용이성을 개선하는 데 도움을 줍니다. 구글 개발자 문서에서도 의존성 주입을 위해 Hilt 사용을 추천하고 있습니다.

즉, U
I Layer의 ViewModel에서 UseCase를 활용할 때, 의존성 주입을 통해 사용하는 것이 일반적입니다. 또한, UseCase는 Repository에 접근해야 하기 때문에 Repository 의존성도 주입해주어야 합니다. Repository는 DataSource에 접근해야 하기 때문에 DataSource도 의존성 주입을 해주어야 합니다. 이러한 연쇄적인 형태로 Domain Layer, Data Layer에서 정의한 UseCase, Repository, DataSource, Retrofit 등을 활용하기 위해서 UI Layer에서 의존성 주입 코드를 작성하게 됩니다.

2-1. gson, hilt, retrofit, okhttp 의존성 추가

먼저 의존성 주입과 관련된 라이브러리들을 추가하겠습니다. 이번 예제에서는 gson, hilt, retrofit, okhttp를 아래와 같이 추가했습니다.

dependencies {

    implementation(project(":domain")) // Domain Layer에 대한 의존성
    implementation(project(":data"))   // Data Layer에 대한 의존성

    // GSON
    implementation("com.google.code.gson:gson:2.9.1")

    // hilt
    implementation("com.google.dagger:hilt-android:2.48")
    ksp("com.google.dagger:hilt-android-compiler:2.48")
    implementation("androidx.multidex:multidex:2.0.1")
    implementation("androidx.hilt:hilt-navigation-compose:1.1.0")

    // Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")
    implementation("com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2")

    //okHttp
    implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.2")
    implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2")
    
    ...
}

2-2. Application Class에 @HiltAndroidApp 어노테이션 추가하기

@HiltAndroidApp 어노테이션은 애플리케이션의 최상위 컴포넌트를 나타냅니다. Hilt의 의존성 주입 기능을 애플리케이션 전체에 사용할 수 있도록 합니다. Hilt를 사용한다면 @HiltAndroidApp 어노테이션이 적용된 Application 클래스를 반드시 포함해야 합니다.

@HiltAndroidApp
class MyApplication : MultiDexApplication() {
    override fun onCreate() {
        super.onCreate()
    }
}

2-3. MainActivity에 @AndroidEntryPoint 어노테이션 추가하기

@AndroidEntryPoint 어노테이션은 Hilt를 사용하여 의존성 주입을 받을 안드로이드 컴포넌트(Activity, Fragment 등)에 적용됩니다. 이 어노테이션이 적용된 Activity(Fragment 등)는 Hilt 의존성 컨테이너에 의해 관리되고, 필요한 의존성을 @Inject 어노테이션을 통해 주입받을 수 있게 됩니다.

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            CleanarchitectureexampleTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

3. Hilt을 사용하기 위한 기본 세팅 정리

Hilt를 사용한 의존성 주입은 UI Layer에서 Domain Layer와 Data Layer의 구성 요소(UseCase, Repository, DataSource 등)를 효율적으로 활용하기 위한 작업입니다. Hilt를 통해 ViewModel과 같은 UI 컴포넌트에서 필요한 의존성을 자동으로 주입받음으로써, 애플리케이션의 개발과 유지보수가 용이해지며, 코드의 모듈성과 테스트 가능성이 향상됩니다.

다음 포스팅에서는 ViewModel에서 UseCase를 주입받는 코
드와 Hilt가 인스턴스를 어떤 방법으로 생성하고 주입하는지에 대한 내용을 설명하겠습니다.

저작자표시 비영리 변경금지 (새창열림)

'안드로이드 > 클린 아키텍처' 카테고리의 다른 글

[안드로이드 클린 아키텍처 시리즈] UI Layer 구현 3편 (with Jetpack Compose) #10  (0) 2024.02.14
[안드로이드 클린 아키텍처 시리즈] UI Layer 구현 2편 (with Hilt) #9  (0) 2024.02.13
[안드로이드 클린 아키텍처 시리즈] Data Layer 구현 2편 #7  (0) 2024.02.11
[안드로이드 클린 아키텍처 시리즈] Data Layer 구현 1편 #6  (0) 2024.02.10
[안드로이드 클린 아키텍처 시리즈] Domain Layer 구현 #5  (0) 2024.02.09
'안드로이드/클린 아키텍처' 카테고리의 다른 글
  • [안드로이드 클린 아키텍처 시리즈] UI Layer 구현 3편 (with Jetpack Compose) #10
  • [안드로이드 클린 아키텍처 시리즈] UI Layer 구현 2편 (with Hilt) #9
  • [안드로이드 클린 아키텍처 시리즈] Data Layer 구현 2편 #7
  • [안드로이드 클린 아키텍처 시리즈] Data Layer 구현 1편 #6
코딩덕
코딩덕
안드로이드, 리액트 등의 개발 노하우와 최신 AI 기술을 다루는 기술 블로그입니다. 실무 중심의 경험을 바탕으로 마주한 문제와 해결 과정을 체계적으로 기록하며, 개발자에게 실질적으로 도움 되는 프로그래밍 팁과 인사이트를 쉽고 명확하게 공유하고자 합니다.
  • 코딩덕
    개발자가 들려주는 IT 이야기
    코딩덕
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 안드로이드 (62)
        • 멀티 모듈 (11)
        • 클린 아키텍처 (11)
        • 트러블 슈팅 (5)
        • 코틀린 (3)
        • 코루틴 (2)
        • Compose (1)
        • Compose UI (6)
        • Compose Dialog (8)
        • Compose Paging3 (11)
        • Compose State (2)
        • Util (1)
      • Github (3)
        • PR Template (2)
        • AI Code Review (1)
      • 리액트 (1)
        • NextJs (1)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코루틴
    Usecase
    ai code review
    Jetpack Compose
    ScrollView
    Clean Architecture
    MutableState
    LazyRow
    Github
    안드로이드
    UI Layer
    데이터 레이어
    멀티 모듈
    flow
    Gradle
    paging3
    클린 아키텍처
    sealed class
    pager
    multi module
    OnBackPressedDispatcher
    recyclerview
    Dialog
    enum class
    트러블슈팅
    pr template
    jsonadapter
    dynamic json
    코틀린
    ViewModel
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩덕
[안드로이드 클린 아키텍처 시리즈] UI Layer 구현 1편 (with Hilt) #8
상단으로

티스토리툴바