Oke deh pada tulisan sebelumnya Optimasi Kode Program Java – Bagian 1 telah dipaparkan beberapa contoh sederhana mengoptimasi kode program dengan cara mengurangi kompleksitas kode program sehingga alur progam tidak bertele tele. Nah pada tulisan kali ini saya ingin memberikan contoh mengoptimasi program Java dengan menggunakan teknik Singleton. Sebelumnya kita harus mengetahui terlebih dahulu apa yang dimaksud dengan Singleton
Singleton merupakan salah satu teknik di dalam design pattern yang banyak digunakan, design pattern itu sendiri adalah teknik atau pola di dalam pengembangan arsitektur perangkat lunak, di dalam design pattern ada beberapa kategori tapi disini saya tidak akan menjelaskan design pattern terlalu dalam, silahkan browsing saja dan cari ebook gang of four yang berbicara lengkap mengenai design pattern. Yang jelas salah satu kategori dari design pattern adalah Creational Pattern, dimana creational pattern ini berbicara bagaimana cara sebuah object diciptakan / di instance. nah Singleton masuk di dalam kategori Creational Pattern ini, dengan menggunakan Singleton kita akan memastikan bahwa hanya ada satu buah object instance yang aktif di dalam sebuah program.Apa sih keuntungannya singleton ini ?
Sebagaimana kita mengetahui bahwa jantung dari java sebenarnya adalah JVM (Java Virtual Machine) dengan JVM ini java bisa berjalan di berbagai platform sistem operasi. Nah selain itu kita juga harus mengetahui bahwa di dalam JVM terdapat sebuah regulasi pengaturan memory yang dikenal dengan istilah Garbage Collection. Sebenarnya setiap kali kita melakukan instantiate terhadap sebuah object JVM akan mengcreate object tersebut dan menyimpannya di dalam Garbage Collector. Nah sebetulnya Java secara default sudah menggunakan Automatic Garbage Collector yang berarti ketika ada object yang tidak lagi di pakai dia akan dibuang dari memory, hanya saja kita bisa melakukan optimasi dengan cara Singleton yaitu memastikan hanya ada satu buah object instance yang aktif di dalam sebuah program
Contoh kita memiliki sebuah Class seperti di bawah ini.
package OptimizeCode; public class SingletonObject { private String name; public SingletonObject(){ //default constructor System.out.println("SingletonObject di instance"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Dan kemudian pada umumnya kita akan melakukan instance object tersebut dengan cara seperti di bawah ini :
package OptimizeCode; public class SingletonExample { public static void main(String[]args){ //melakukan instance object non Singleton SingletonObject obj1 = new SingletonObject(); SingletonObject obj2 = new SingletonObject(); //menguji apakah obj1 dan obj2 sama if(obj1.equals(obj2)){ System.out.println("obj1 dan obj2 sama --> obj1 : "+obj1+" obj2 : "+obj2); }else{ System.out.println("obj1 dan obj2 tidak sama --> obj1 : "+obj1+" obj2 : "+obj2); } } }
Dan hasil output program tersebut adalah sebagai berikut :
SingletonObject di instance SingletonObject di instance obj1 dan obj2 tidak sama --> obj1 : OptimizeCode.SingletonObject@6bbc4459 obj2 : OptimizeCode.SingletonObject@152b6651
Bisa di lihat dari output program diatas bahwa obj1 dan obj2 tidak sama artinya ketika kita melakukan instantiate object dengan cara new SingletonObject(); JVM akan mengcreate object baru yang berbeda. Nah sekarang pada class SingletonObject.java kita akan melakukan penambahan kode program sehingga menjadi seperti di bawah ini :
package OptimizeCode; public class SingletonObject { private static SingletonObject object = null; private String name; public SingletonObject() { // default constructor System.out.println("SingletonObject di instance"); } public static SingletonObject getInstance() { if (object == null) { object = new SingletonObject(); } return object; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Dan pada class SingletonExample.java kita rubah menjadi seperti di bawah ini :
package OptimizeCode; public class SingletonExample { public static void main(String[]args){ //melakukan instance object secara Singleton SingletonObject obj1 = SingletonObject.getInstance(); SingletonObject obj2 = SingletonObject.getInstance(); //menguji apakah obj1 dan obj2 sama if(obj1.equals(obj2)){ System.out.println("obj1 dan obj2 sama --> obj1 : "+obj1+" obj2 : "+obj2); }else{ System.out.println("obj1 dan obj2 tidak sama --> obj1 : "+obj1+" obj2 : "+obj2); } } }
Dan ketika di jalankan output program akan menjadi seperti ini :
SingletonObject di instance obj1 dan obj2 sama --> obj1 : OptimizeCode.SingletonObject@6bbc4459 obj2 : OptimizeCode.SingletonObject@6bbc4459
Sekarang bisa dilihat perbedaan nya, walaupun di panggil dua kali object SingletonObject.java hanya melakukan satu kali instantiate dan object dari obj1 dan obj2 adalah sama. Hal ini menunjukkan hanya ada satu buah object instantiate yang aktif dalam sebuah program, bayangkan pada aplikasi yang besar dengan jumlah object yang banyak betapa Singleton ini bisa digunakan untuk mengoptimasi kinerja software yang kita buat. Demikian contoh sederhana implementasi Singleton yang dapat mengoptimasi kode program Java, selamat belajar Java dan rasakan manfaatnya