2023年8月2日水曜日

Android Koin の使い方を調べたので解説

どうも。どっことです。今回はKoinの使い方について解説します。

Koinを使ったDIの実装

Koinってなんだよ、というあなたはこちらを見てくださると大変嬉しいです。ちなみに、Daggerというライブラリを使ってDIを実現するパターンもありましたが、実装難易度の観点から今回はKoinを使う方針としました。

それでは実装方法について解説します。

ライブラリの組み込み

まずはライブラリを組み込む必要があるのでapp/build.gradle.ktdependenciesに以下を記述します。

dependencies {
    // 他にもあるけど説明のためこれだけ。
    implementation("io.insert-koin:koin-android:3.4.2")
}

Applicationクラスの実装

続いて、Applicationクラスに必要な処理を追加していきます。Applicationってどうすんだっけ、というあなたはこちらを見てくださると大変嬉しいです。

moduleインスタンスを作ってstartKoin を実行します。moduleインスタンスには DIするインターフェースとそれの実装クラスを登録します。以下はSampleRepositoryImpl(dao: Dao)をDIするサンプルです。

    private val appModule = module {
        single<SampleRepository> { SampleRepositoryImpl(get()) }
    }
    protected open val dao = module {
        single {
            Room.databaseBuilder(
                applicationContext,
                Database::class.java,
                DATABASE_NAME
            ).build().dao()
        }
    }
    override fun onCreate() {
        super.onCreate()
        startKoin {
            androidContext(this@SampleApplication)
            modules(appModule, dao)
        }
    }

メモ:single で登録しておくと、シングルトンパターンでオブジェクトを管理してくれる。

各機能にアクセスする

あとはDIしたい箇所で、by inject()を使ってインジェクトすると、簡単にアクセスすることができます。

private val repository : SampleRepository by inject()

まとめ

今回はDIをシンプルにアプリに導入できるライブラリであるKoinの使い方を解説しました。昨今のプログラムのレガシー化やCI/CDに向けたモジュールの疎結合を意識する上でDIは必要不可欠な機能の一つです。DIを実現するものは今回のKoin以外にもさまざまなものがありますので、比較・検討した上で導入しましょう。

参考

移行予定

どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。