Tutorial Kotlin Belajar Dependency Injection Dasar Bahasa Indonesia

Tutorial Kotlin Dependency Injection Pemula Bahasa Indonesia
Tutorial Kotlin Dependency Injection Pemula Bahasa Indonesia
Codingtive.com - Pernahkah kamu mendengar istilah dependency injection ? Sebelum kita belajar cara menggunakannya, kita perlu tahu konsepnya. Apa itu dependency injection ?
"Dependency Inversion Principle is simply a guideline to write loosely-coupled code"

Penjelasan singkatnya dependency injection merupakan suatu pattern atau teknik untuk mengurangi ketergantungan ketika mengirimkan object ke class yang membutuhkan.
Tujuan penggunaan dependency injection yaitu mengurangi atau meminimalisir suatu class agar tidak terikat dengan class lain. Berikut gambaran terdapat class A dan class B yang saling terikat (dependent) :
dependency class
dependency class
Untuk memahami lebih lanjut, sekarang kita coba implementasikan dengan membuat project sederhana. Contoh pada tutorial ini yaitu menampilkan data siswa, pertama tanpa menggunakan dependency injection dan yang kedua menggunakan dependency injection manual.

1. Project tanpa dependency injection

Buat project baru di Android Studio dengan nama misalnya learnDI, pastikan laptop kamu terkoneksi internet dan tunggu sampai proses sinkronisasi gradle selesai. 

Untuk menampilkan data siswa, kita asumsikan memiliki 2 class yaitu StudentRepository, dan StudentPresenter yang akan diimplementasikan pada MainActivity. Pertama buat file baru pada package project dengan nama StudentRepository.kt :
package com.codingtive.androidtutorial

class StudentRepository {

    fun getName(name: String): String {
        return "Student name is $name "
    }

    fun getAddress(address: String): String {
        return "from $address"
    }
}
Class StudentRepository ini berisi method untuk mendapatkan nama dan alamat, kemudian buat file baru dan beri nama StudentPresenter.kt untuk mengolah data siswa. Kodenya seperti berikut :
package com.codingtive.androidtutorial

class StudentPresenter {

    private val student = StudentRepository()

    fun getStudent(name: String, address: String): String {
        return student.getName(name)+student.getAddress(address)
    }
}
Sekarang implementasikan class StudentPresenter pada file MainActivity. Pertama buat layout sederhana, buka file activity_main.xml pada folder res > layout, ubah kodenya menjadi seperti berikut :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp"
        tools:context=".MainActivity">

    <TextView
            android:id="@+id/student_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:layout_above="@id/btn_show_student"
            android:textSize="18sp"/>

    <Button
            android:id="@+id/btn_show_student"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:text="SHOW STUDENT"
            android:textColor="#FFF"
            android:background="@color/colorPrimary"
            android:layout_centerInParent="true"/>

</RelativeLayout>
Buka file MainActivity.kt dan ubah kodenya menjadi seperti berikut :
package com.codingtive.androidtutorial

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.codingtive.androidtutorial.R
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val presenter = StudentPresenter()

        btn_show_student.setOnClickListener {
            student_text.text = presenter.getStudent("Codingtive", "Indonesia")
        }
    }
}
Sekarang coba jalankan maka hasilnya seperti berikut :
tutorial dependency injection kotlin
Tanpa dependency injection
Dilihat dari kode diatas tidak ada masalah dan berjalan normal, namun sebenarnya memiliki kekurangan. Jika diperiksa lagi pada StudentPresenter melakukan initialize dan menggunakan class StudentRepository, padahal bisa saja class StudentRepository digunakan untuk banyak class lainnya. Jika kedepannya terdapat perubahan pada class StudentRepository maka semua class yang menggunakannya juga harus menyesuaikan, hal ini akan mempersulit dan berujung pada hardcoded dependency.

Untuk menangani hal tersebut terjadi, maka diperlukannya penggunaan prinsip dependency injection, berikut kelebihan dan kekurangan menggunakan dependency injection :

Kelebihan :
- Menghindari hardcoded dependency dan mengurangi ketergantungan class
- Memudahkan untuk unit test dan maintenance 
- Mengembangkan aplikasi lebih luas menjadi lebih mudah

Kekurangan :
- Lumayan sulit untuk dipelajari
- Jika digunakan secara berlebihan dapat menyebabkan masalah manajemen kode

Untuk dasar dan awal belajar, kita akan menggunakan project sebelumnya dengan menggunakan dependency manual.

2. Project dengan dependency injection

Cara untuk menggunakan dependency manual yaitu pada class StudentPresenter hanya menerima object dari class StudentRepository dan menggunakannya tanpa melakukan initialize. Lalu bagaimana cara menggunakan class repository di class presenter ? Caranya yaitu menggunakan constructor.

Kode class StudentRepository menjadi seperti berikut :
package com.codingtive.androidtutorial

class StudentRepository(
    private val name: String,
    private val address: String) {

    fun getName(): String {
        return "Student name is $name "
    }

    fun getAddress(): String {
        return "from $address"
    }
}
Kode pada class StudentPresenter menjadi seperti berikut :
package com.codingtive.androidtutorial

class StudentPresenter(private val student: StudentRepository) {

    fun getStudent(): String {
        return student.getName()+student.getAddress()
    }
}
Lalu pada MainActivity.kt menjadi seperti berikut :
package com.codingtive.androidtutorial

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.codingtive.androidtutorial.R
import kotlinx.android.synthetic.main.activity_main.*

class StudentActivity : AppCompatActivity() {

     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_student)

        val name = "Codingtive"
        val address = "Indonesia"

        val student = StudentRepository(name, address)
        val presenter = StudentPresenter(student)

        btn_show_student.setOnClickListener {
            student_text.text = presenter.getStudent()
        }
    }
}
Dengan menggunakan prinsip dependency injection, jika terdapat perubahan pada class StudentRepository maka kita hanya perlu menggantinya pada class MainActivity saja, dan sekarang coba jalankan maka hasilnya sama.
kotlin dependency injection
kotlin dependency injection tutorial
Demikian tutorial kotlin belajar dependency injection dasar untuk pemula bahasa indonesia, jika kamu ada pertanyaan atau mau diskusi dapat mengisi kolom komentar. Subscribe website codingtive untuk mendapatkan notifikasi update artikel dan tutorial menarik lainnya. Terima kasih

Untuk kedepannya akan kami bahas juga tutorial dependency injection menggunakan library, tunggu ya.

Berlangganan update artikel terbaru via email:

Belum ada Komentar untuk "Tutorial Kotlin Belajar Dependency Injection Dasar Bahasa Indonesia"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel