Dependency Injection Performance Dagger 2 Vs Koin with Kotlin

Ibnu Muzzakkir
Tunaiku Tech
Published in
4 min readMay 12, 2019

Dependency Injection merupakan salah satu bentuk dari design pattern dimana menjadikan sebuah kelas bersifat tidak saling bergantung dengan dependency lainnya. Dependency injection sendiri hadir untuk menjawab salah satu dari point SOLID Principle yaitu Dependency Inversion.

Dagger 2 hadir terlebih dahulu dibandingkan Koin di dunia Dependency Injection pada Android. Mereka berdua menawarkan berbagai solusi yang memiliki kelebihan dan kekurangan dari satu sama lainnya. Sebagai engineer kita harus bisa menentukan mana yang lebih tepat untuk kebutuhan yang hendak kita capai. Jadi, Dagger 2 atau koin ?

Kali ini saya tidak membahas cara implementasi dari Dagger 2 ataupun Koin itu sendiri di project Android yang akan kita buat. Sesuai dengan judul dari artikel ini kita akan membahas performance dari setiap library tersebut. Hasil dari artikel ini diharapkan bisa dijadikan bahan referensi sebelum kita memilih Dagger 2 atau Koin.

Apa hasilnya ?

Langsung aja ke inti dari pembahasan artikel ini, point — point yang akan saya jadikan sebagai penilaian dalam melakukan performance testing adalah sebagai berikut ini :

  • Berapa lama waktu yang dibutuhkan Koin/Dagger 2 saat mengcreate sebuah komponen saat pertama kali ?
  • Berapa lama waktu yang dibutuhkan Koin/Dagger2 saat siap kita panggil disebuah activity class ?

Point — point diatas tidak menutup kemungkinan untuk ditambahkan dikemudian hari jika diperlukan

Berikut ini adalah tools dan library yang saya gunakan untuk melakukan performance test :

  • Dagger 2 ( Version : 2.20)
  • Koin (Version : 1.0.2)
  • Android Profiler (Build in Android Studio)

Cara yang saya gunakan untuk melakukan performance test kali ini adalah dengan membuat masing — masing 10 module untuk dagger 2 dan koin yang disetup pada 1 project yang sama. Masing — masing module di provide dengan scoping Application. Inisialisasi yang digunakan sesuai dengan dokumentasi untuk masing — masing library dan ditulis dengan bahasa Kotlin.

Method tracing digunakan untuk menganalisa fungsi yang kita panggil sampai saat dia selesai di execute. Hasil dari method tracing tadi berupa sebuah file *.trace yang bisa kita buka dan lihat secara visualisasi di Android Profile.

Koin Create Component device Mi A1

Gambar diatas merupakan salah satu contoh visualisasi ketika koin melakukan create component pada level application. dimana proses yang terjadi di dalam thread sendiri ditandai dengan warna hijau. Untuk mencari tau berapa lama waktu yang diperlukan kita bisa lihat 00.000–00.276 atau kalau kita menghover main di bawah kolom thread akan terlihat hasil hasil 208.11ms ( hasilnya bisa dalam satuan milisecond atau microsecond atau detik).

Berikut ini adalah table data dari hasil performance test :

Tabel Performance test Dagger 2 Vs Koin

Dari data diatas menunjukkan bahwa Dagger 2 memiliki kecepatan yang jauh lebih cepat dibandingan dengan koin dalam melakukan proses create component dan juga injection method. Sebenarnya dilainhal koin sendiri telah dibuktikan tidak memiliki generated class namun faktor tersebut tidak mempengaruhi seberapa cepat dia melakukan proses injection dan juga create component.

Kesimpulan

Masing — masing library tersebut memiliki kekurangan dan kelebihan. Itu memudahkan kita untuk memilih library mana yang sebenarnya dibutuhkan oleh kebutuhan kita sendiri. Terlepas dari Dagger 2 yang memiliki kecapatan lebih cepat dalam mengcreate sebuah component dan proses injection pada sebuah kelas.

Jadi sebenarnya kalian harus pilih yang mana ? menurut saya ada beberapa tipe yang bisa dikategorikan diantaranya :

  • Orang yang belum pernah sama sekali menggunakan dagger ataupun koin dan ingin mempelajari Dependency Injection dengan mudah di Android, coba kalian pilih Koin saja karena implementasinya sangat mudah jika dibandingan dengan Dagger
  • Orang yang sudah menggunakan dagger sebelumnya, saya sarankan untuk tetap pada Dagger selain learning curve kalian juga kecil, kalian juga sudah mendapatkan benefit secara performance waktu yang dibutuhkan untuk Injection dan Create component jauh lebih unggul Dagger 2 dibandingan dengan Koin
  • Bagi kalian yang sudah terlanjur di koin dan mempunyai pikiran “yuk migrate ke Dagger 2”. Jangan lupa untuk memikirkan learning curve yang harus diambil oleh tim kalian di kantor apakah itu akan memperlambat development atau dari tim kalian ok — ok saja.

Awalnya saya sempat berpikiran untuk migrate ke koin dengan memikirkan pro cons yang ada di Koin itu sendiri namun setelah saya lakukan performance test sendiri. Saya akan tetap stay di dagger untuk sekarang karena di Tunaiku kita dari awal memang sudah menggunakan dagger dan terlebih lagi Learning curve yang akan kita lewati akan lebih mudah.

Ohiya untuk repositorynya bisa kalian akses disini ya soal gimana lebih detailnya proses performance testnya https://github.com/astroidnu/DaggerVsKoin. mau tau lebih dalam yuk join jadi tim kita di tunaiku, ditunggu ya :D

#HappyCoding #WeAreHiring

Jadi pake Dagger 2 atau Koin ?

--

--

Ibnu Muzzakkir
Tunaiku Tech

Strong Research, Hot tea and bread ! that’s enough. Follow my Github : https://github.com/astroidnu