Memahami Immutable Class Dan Objek Pada Java

Apa Itu Immutable Class dan Objek?

Immutable artinya tidak sanggup diubah, atau permanen atau tetap. Kaprikornus class yang immutable ialah class yang saat dibuat, kontennya tidak sanggup diubah. Sedangkan immutable objek ialah objek yang saat dibuat, maka apa yang dimiliki oleh objek tersebut (object state) tidak sanggup diubah.

 maka apa yang dimiliki oleh objek tersebut  Memahami Immutable Class Dan Objek Pada Java


Misalnya objek siswa mempunyai state berupa nama, usia, tanggal masuk dan sebagainya, kalau objek siswa itu immutable, maka nilai dari state-nya tidak sanggup diubah sesudah objek siswa itu dibuat.

Beberapa pola class immutable pada Java adalah String, Boolean, Byte, Short, Integer, Long, Float, Double dan sebagainya. Class-class ini termasuk dalam wrapper class, yaitu class yang objeknya mengandung tipe data primitif.

Ketika objek dibentuk dari wrapper class tersebut, maka objek itu mempunyai field, dan di dalam field tersebut data primitif sanggup disimpan.



Bagaimana Cara Untuk Membuat Immutable Class dan Objek?

Untuk menciptakan immutable class, beberapa langkah di bawah ini harus diikuti:

1. Mendeklarasikan class sebagai final.

Dengan mendeklarasikan class sebagai final, maka class tersebut tidak sanggup diwariskan / inherited dan method-nya juga tidak sanggup di-overriding oleh subclass-nya.

2. Mengatur nilai dari properti class hanya dengan memakai konstruktor.

3. Membuat semua properti / fields pada class menjadi selesai dan private.

Dengan menciptakan properti / fields menjadi final, maka nilai dari field tersebut tidak sanggup diubah.

4. Tidak memakai method setters

Dengan tidak memakai method setters, maka class tidak mempunyai method yang sanggup memodifikasi nilai dari fields class.

5. Memerlukan perhatian khusus bila memakai variabel instance yang mutable.
Suatu variabel instance sanggup bersifat mutable ataupun immutable. Kaprikornus untuk mengatasinya ialah dengan mengenalinya dan mengembalikan objek gres yang mempunyai salinan konten dari mutable objek

Contoh Dari Immutable dan Mutable Class

a. Mutable Class
Sebelum menuju ke pola immutable class, berikut ini ialah pola praktis dari mutable class dengan mutable objek (objek yang state nya sanggup diubah) :

class Siswa
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
package com.bahasaJava.mutableClass;  public class SiswaMutable {    private String nama;  private int usia;    public SiswaMutable(String nama, int usia){      this.nama = nama;   this.usia = usia;  }      //Getter dan setter method nama  public String getNama() {   return nama;  }  public void setNama(String nama) {   this.nama = nama;  }    //Getter dan setter method usia  public int getUsia() {   return usia;  }  public void setUsia(int usia) {   this.usia = usia;  }    //Method toString akan mengembalikan string  //yang merupakan representasi dari objek  public String toString(){      return "Nama siswa ialah " + nama + " " +   "berumur " + usia + " tahun";     }   } 


class TestSiswaMutable
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
package com.bahasaJava.mutableClass;  public class TestSiswaMutable {    public static void main(String args []){      SiswaMutable siswaMutable = new SiswaMutable("Atta", 12);   System.out.println(siswaMutable);      //set method akan mengubah state dari objek itu   siswaMutable.setNama("Zia");   siswaMutable.setUsia(15);   System.out.println("Setelah state objek berubah : ");   System.out.println(siswaMutable);     }  } 

Output:
Nama siswa ialah Atta berumur 12 tahun
Setelah state objek berubah :
Nama siswa ialah Zia berumur 15 tahun

Dari output tersebut sanggup dilihat bahwa state objek telah berubah sebab memakai setter method.

b. Immutable class dan objek

Berikut ini ialah pola dari immutable class dan objek:

class SiswaImmutable
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
package com.bahasaJava.ImmutableClass;  //Class dideklarasikan final public final class SiswaImmutable {    //Class field ialah private dan final  private final String nama;  private final int usia;    //Konstruktor untuk mengatur properti class  public SiswaImmutable(String nama, int usia){      this.nama = nama;   this.usia = usia;  }      //Hanya menyediakan getter method tanpa setter method  //untuk mengembalikan nilai field  public String getNama() {   return nama;  }    //Method toString akan mengembalikan string  //yang merupakan representasi dari objek  public String toString(){      return "Nama siswa ialah " + nama + " " +   "berumur " + usia + " tahun";     }   } 

class TestSiswaImmutable
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
package com.bahasaJava.ImmutableClass;  public class TestSiswaImmutable {    public static void main(String args []){      //Ini ialah immutable objek   //State dari objek ini tidak sanggup diubah   SiswaImmutable siswaImmutable = new SiswaImmutable("Atta", 12);   System.out.println(siswaImmutable);        }  } 



c. Trik untuk class yang mempunyai variabel instance mutable

Berikut ini ialah pola class yang walaupun telah mengikuti cara-cara di atas, namun class tersebut masih mutable, sebab ada variabel instance yang mutable yaitu tanggalDaftar dengan tipe Date, lihat line 12 pada isyarat dibawah ini:

class SiswaMutable
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
package com.bahasaJava.mutableClass;  import java.util.Date;  //Class dideklarasikan final public final class SiswaMutable {    //Class field ialah private dan final  private String nama;  private int usia;  //tanggalDaftar merupakan variabel instance mutable  private final Date tanggalDaftar;    //Konstruktor untuk mengatur properti class  public SiswaMutable(String nama, int usia, Date tanggalDaftar){      this.nama = nama;   this.usia = usia;   this.tanggalDaftar = new Date(tanggalDaftar.getTime());  }      //Hanya menyediakan getter method tanpa setter method  //untuk mengembalikan nilai field  public String getNama() {   return nama;  }    public int getUsia() {   return usia;  }    public Date getTanggalDaftar() {   return tanggalDaftar;  }    //Method toString akan mengembalikan string  //yang merupakan representasi dari objek  public String toString(){   return "Nama siswa ialah " + nama + " " +   "berumur " + usia + " tahun, " + "tanggal daftar " + tanggalDaftar;  }   } 

class TestSiswaMutable
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
package com.bahasaJava.mutableClass; import java.util.Date; public class TestSiswaMutable {    public static void main(String args []){      SiswaMutable siswaMutable = new SiswaMutable("Atta", 12, new Date());   System.out.println(siswaMutable);      System.out.println();      System.out.println("Setelah memakai method ubah state objek(): ");      ubahStateObjek(siswaMutable.getTanggalDaftar());   System.out.println(siswaMutable);  }        static void ubahStateObjek(Date tanggalDaftar){   tanggalDaftar.setDate(20);//Diubah menjadi tanggal 20   }  } 

Contoh output:
Nama siswa ialah Atta berumur 12 tahun, tanggal daftar Fri Jul 28 18:24:59 ICT 2017

Setelah memakai method ubah state objek():
Nama siswa ialah Atta berumur 12 tahun, tanggal daftar Thu Jul 20 18:24:59 ICT 2017


Dari output tersebut terlihat bahwa tanggal daftar telah berubah, hal ini sebab class java.util.Date memiliki method setDate() untuk tetapkan tanggal.

Oleh sebab itu, untuk menciptakan objek itu immutable, maka harus mengembalikan objek gres dengan salinan konten dari objek mutable tersebut. 

Perhatikan pada line 35-43 dari isyarat kegiatan class SiswaImmutable di bawah ini:

class SiswaImmutable

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
package com.bahasaJava.ImmutableClass;  import java.util.Date;  //Class dideklarasikan final public final class SiswaImmutable {    //Class field ialah private dan final  private String nama;  private int usia;  //tanggalDaftar merupakan variabel instance mutable  private final Date tanggalDaftar;    //Konstruktor untuk mengatur properti class  public SiswaImmutable(String nama, int usia, Date tanggalDaftar){      this.nama = nama;   this.usia = usia;   this.tanggalDaftar = new Date(tanggalDaftar.getTime());  }      //Hanya menyediakan getter method tanpa setter method  //untuk mengembalikan nilai field  public String getNama() {   return nama;  }    public int getUsia() {   return usia;  }      /*   Class Date ialah mutable jadi perlu perhatian khusus.   Method ini dilarang mengembalikan acuan dari    variabel instance yang asli.   Oleh sebab itu, method ini harus mengembalikan objek   gres dari class Date dengan konten yang sama    */  public Date getTanggalDaftar() {   return new Date(tanggalDaftar.getTime());  }      //Method toString akan mengembalikan string  //yang merupakan representasi dari objek  public String toString(){   return "Nama siswa ialah " + nama + " " +   "berumur " + usia + " tahun, " + "tanggal daftar " + tanggalDaftar;  }   } 


class TestSiswaImmutable

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
package com.bahasaJava.ImmutableClass;  import java.util.Date;  public class TestSiswaImmutable {    public static void main(String args []){      SiswaImmutable siswaImmutable = new SiswaImmutable("Atta", 12, new Date());   System.out.println(siswaImmutable);      System.out.println();      System.out.println("Setelah memakai method ubah state objek(): ");      ubahStateObjek(siswaImmutable.getNama(), siswaImmutable.getUsia(), siswaImmutable.getTanggalDaftar());   System.out.println(siswaImmutable);  }        static void ubahStateObjek(String nama, int usia, Date tanggalDaftar){   tanggalDaftar.setDate(20);//Diubah menjadi tanggal 20   }  } 

Contoh output:
Nama siswa ialah Atta berumur 12 tahun, tanggal daftar Fri Jul 28 19:37:42 ICT 2017

Setelah memakai method ubah state objek():
Nama siswa ialah Atta berumur 12 tahun, tanggal daftar Fri Jul 28 19:37:42 ICT 2017

Dari output terlihat bahwa walaupun kita sudah memakai method ubahStateObjek() untuk mengganti tanggal, namun tanggal tetap tidak berubah.

Belum ada Komentar untuk "Memahami Immutable Class Dan Objek Pada Java"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel