[java] Immutable Data Types

Immutable Data Type, adalah struktur data default untuk bahasa pemrograman functional macam haskell dan kawan-kawan. Bagaimana dengan Java, bahasa pemrograman imperatif berorientasi objek.

Immutable Data Types ternyata sering digunakan tanpa disadari oleh banyak(kayaknya) programmer Java(termasuk saya dulu). Apa itu? String.

Ya, String termasuk ke dalam immutable data types. Ups, tunggu dulu. Immutable Data Types itu sendiri apa?

Immutable data types adalah struktur data yang begitu dibuat tidak bisa diubah. Contoh, begitu kita membuat String “abc”, maka data itu (atau objek itu di java) tidak bisa diubah.

Lho, saya bisa ubah kok contoh: String abc = “abc”; abc += “d”; Bukankah sekarang objeknya berubah jadi “abcd”?

Tidak, objek “abc” di awal tidak berubah. Yang terjadi sebenarnya Anda membuat sebuah objek baru yang berisi “abcd”. Jadi ada 2 buah objek di memori sekarang, yaitu objek “abc” dan objek “abcd” (3 sebenarnya karena objek “d” juga dibuat). Dan variabel abc cuma menunjuk objek yang berbeda.

Kenapa di Java dibuat begitu? Alasannya adalah untuk menghemat memori. Di dalam bagian memory heap di Java, ada yang namanya “String pool” yang isinya adalah semua string yang pernah dibuat. Jika ada permintaan untuk membuat objek string baru, Java Virtual Machine (atau JVM) akan mengecek dulu di String Pools, apakah objek string tersebut sudah ada atau belum. Jika sudah, maka tinggal di-reference saja ke objek tersebut. Jika belum maka objek string baru akan dibuat. Karena itu mungkin saja kalau banyak variabel string yang menunjuk ke objek yang sama di memori.

Apa efeknya untuk programmer? Pengetahuan akan ke-immutable-an String ini berguna jika kita membuat program yang kaya akan operasi manipulasi string. Dari pada membuat banyak objek mubazir di dalam memori yang pastinya akan menghambat performa program, gunakan saja versi mutable data types dari String, yaitu StringBuffer atau versi non-synchronised-nya StringBuilder. Seperti yang diberitahu oleh dosen saya, program yang baik adalah pemilihan algoritma dan struktur data yang tepat.

Struktur data lain yang immutable di Java antara lain, BigInteger dan BigDecimal.

Lalu apa kegunaan dari Immutable Data Types? Concurrency. Jika sebuah data yang diakses oleh lebih dari 1 thread tidak akan berubah, maka tidak ada keperluan untuk melakukan sinkronisasi untuk menjaga integritas data.

Mengenai apa itu konkurensi dan sinkronisasi, mungkin di bahasan lain. Salam.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s