[android] Dependency Injection(Hilt)

Hilt を使って依存性(Repository)を注入する最小例
Activity から Repository を直接 new しない → テストしやすい設計

MyRepositoy.kt

interface MyRepository {
    fun getMessage(): String
}

class MyRepositoryImpl : MyRepository {
    override fun getMessage() = "Hello from Repository!"
}

AppModule.kt

package com.example.hiltsample

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

    @Provides
    @Singleton
    fun provideMyRepository(): MyRepository = MyRepositoryImpl()
}

MainActivity.kt

// MainActivity.kt
package com.example.hiltsample

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    @Inject lateinit var repository: MyRepository

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            // DI された repository が使える
            androidx.compose.material3.Text(text = repository.getMessage())
        }
    }
}

Activity が Repository に依存しない(疎結合)
FakeRepository に差し替えるだけで テストが簡単
Repository の作り方を 1 箇所にまとめられて 保守性が上がる