Monday, April 13, 2009

Mutable & Immutable

Hari ini saya membaca ebook tentang JAAS dan pada salah satu sub bab dijelaskan mengenai sebuah class yang immutable. Mutable dan immutable pertama kali saya pelajari saat dulu mengambil sertifikasi java, tapi kok tumben masih ingat sampai sekarang hehehe...

Waktu itu contoh yang paling gampang adalah class String. String termasuk immutable karena sekali dibuat maka state string tersebut tidak dapat diubah. Termasuk jika kita menggabung dua string melalui method String.concat() misalnya. Karena cukup penasaran mengapa hal itu bisa terjadi maka saya lihat source method String.concat() tersebut. Ternyata cukup mudah dipahami, method tersebut mengembalikan sebuah nilai string baru lewat salah satu konstruktor yang dimiliki String. Berikut adalah isi method String.concat()

public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}

Dengan demikian jika kita menginginkan class yang kita buat menjadi immutable caranya cukup mudah : pastikan tidak ada satu method atau variabel pun yang bisa dipanggil untuk mengubah state object tersebut. Jika method yang kita buat memiliki return value berupa class yang sama dengan class yang immutable tersebut, maka kita bisa mengakalinya seperti String.concat() tersebut, yaitu memberikan return value berupa new object. Untuk variabel, sebaiknya mengikuti aturan java bean, yaitu dengan membuat private variabel dan memiliki method getter-setter untuk mengakses variabel tersebut. Karena class yang kita inginkan immutable, maka kita tidak perlu memiliki setter. Untuk mengeset nilai variabel bisa kita lakukan dengan memiliki konstruktor yang mengeset nilai variabel-variabel tersebut. Pastikan juga tidak ada method lain yang bisa mengubah nilai variabel tersebut selain konstruktor.

0 comments:

 

©2009 Stay the Same | by TNB