{"id":2447,"date":"2022-04-19T09:56:29","date_gmt":"2022-04-19T09:56:29","guid":{"rendered":"https:\/\/sunaonako.my.id\/?p=2447"},"modified":"2022-11-04T09:24:18","modified_gmt":"2022-11-04T09:24:18","slug":"contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton","status":"publish","type":"post","link":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/","title":{"rendered":"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Singleton Principle (A class of which only a single instance can exist) termasuk dalam kategori Creational Pattern, yaitu pola atau teknik pemrograman mengenai metode dalam pembuatan object. Singleton pattern adalah design pattern yang digunakan untuk membatasi instanisasi dari suatu kelas menjadi hanya satu object, membatasi sebuah global point of access ke suatu object. Jika kita ingin membuat multiple instances dari kelas singleton, hasilnya akan percuma karena metode ini memaksa objek memiliki hanya satu instance singleton class client. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kali ini, kita tidak hanya membahas apa itu singleton principle, tapi juga membahas kelemahan Design Pattern Singleton, dan perdebatan apakah singleton bukan design pattern dan bagaimana menerapkan thread optimized singleton.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Untuk Demo Singleton menggunakan Swing GUI berbasis java, download Link nya dengan klik <a href=\"https:\/\/link.ap1.storjshare.io\/ju2qjh3ifwpj7tqxliliq3tf3cea\/course%2FSingleton%20example.rar\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"link ini\">link ini<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-konsep-singleton-design-pattern\">Konsep Singleton Design Pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Singleton Pattern pada dasarnya masih dalam kategori Creational design pattern yang memungkinkanmu memiliki kelas yang hanya memiliki satu instance dan hanya menyediakan satu titik akses global ke instance ini. Kamu dapat perhatikan gambar berikut:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"731\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works-1024x731.png\" alt=\"Singleton Design Pattern Concept, learning Design Pattern of Singleton\" class=\"wp-image-2578\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works-1024x731.png 1024w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works-300x214.png 300w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works-768x548.png 768w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works-360x257.png 360w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works-545x389.png 545w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Group-Works.png 1477w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Katakanlah kamu membuat aplikasi dan kamu ingin membuat <em>global state<\/em>  dimana akan mempertahankan statenya ke seluruh lifecycle aplikasi. Satu-satunya cara adalah kamu hanya menyediakan satu jalur untuk mereferensi dan mengakses global state (satu instance diseluruh aplikasi). karena jika ada dua &#8220;jalur&#8221; akan ada perbedaan output tentunya.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Misal kamu ingin sebuah Arraylist dapat diakses secara global dengan value array yang akan selalu sama ketika dipanggil di semua tempat. Dan kamu ingin ketika memodifikasi arraylist atau list seperti menambahkan atau mengurangi isi array di satu tempat misal kelas A, maka semua kelas tempat arraylist dipanggil akan mempunyai nilai arraylist yang sama persis seperti di kelas A. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-bentuk-visual-dari-diagram-model-singleton-principle-menggunakan-uml\">Bentuk visual dari diagram model singleton principle menggunakan UML <\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"538\" height=\"525\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-3.png\" alt=\"Singleton Design Pattern UML, Diagram example of Singleton Principle\" class=\"wp-image-2579\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-3.png 538w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-3-300x293.png 300w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-3-360x351.png 360w\" sizes=\"(max-width: 538px) 100vw, 538px\" \/><figcaption class=\"wp-element-caption\">Singleton UML<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Kalian perhatikan keunikan dari UML Singleton diatas, constructor dari singleton dibuat private, mengapa demikian? Ide memprivate constructor adalah agar ketika client memanggil kelas singleton, dalam UML Case ini SingleGlobalClass, client tidak boleh memanggil konstruktor sehingga client tidak membuat banyak instance dikelas singleton.  Dan selanjutnya getInstance method bekerja dengan cara melakukan pengecekan, jika sudah ada instance objek kelas singleton maka jangan buat instance, namun jika belum ada buat instance.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Singleton {\n    private static Singleton instance = null;\n    \/\/ konstruktor yang modifiernya private\n    private Singleton {\n    }\n    public static Singleton GetInstance() {\n        if (instance == null) {\n            instance = new Singleton();\n        }\n        return instance;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kelas singleton memiliki konstruktor yang hak aksesnya adalah private. Sehingga konstruktor hanya dapat dipanggil dari dalam kelas. Tujuan untuk mencegah constructor , di akses dengan keyword new pada class lain.<br>Objek lain yang membutuhkan kelas ini dapat meminta instance kelas dengan memanggil method statik GetInstance.<br>Deklarasi null bertujuan bila belum ada instance maka akan membuat instance class yang baru.<br>Metode getInstance digunakan juga untuk memberikan akses dari luar ke objek dan dapat digunakan dengan cara berikut:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Singleton.getInstance().doSomething();<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cara-menggunakan-langkah-langkah-implementasi-singleton-sederhana\">Cara Menggunakan: Langkah-langkah implementasi Singleton Sederhana<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Membuat constractor pada kelas yang akan digunakan sebagai singleton objek. Pada constractor ini akan dilakukan instansiasi objek setelah dilakukan pengecekan apakah objek telah dibuat atau belum. Sehingga ketika objek telah dibuat, maka tidak akan dibuat baru lagi.<\/li>\n\n\n\n<li>Membuat private static field untuk menyimpan objek yang telah dibuat pada constractor.<\/li>\n\n\n\n<li>Membuat Public Method yang digunakan sebagai pemanggilan objek ini. Sehingga ketika ada yang membutuhkan objek ini, tinggal memanggil method ini, tanpa harus membuat instansiasi baru. (contoh method : getInstance()).<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-penerapan-design-pattern-singleton-di-dunia-nyata\">Penerapan Design Pattern Singleton di dunia nyata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Secara definisi, Singleton digunakan apabila menemukan masalah desain, di mana kita hanya perlu memiliki satu instance dari jenis kelas tertentu di seluruh domain aplikasi. Misalnya untuk kasus-kasus berikut :<br><strong>File log aplikasi<\/strong><br>Singleton pattern digunakan dalam desain class logger. Class ini umumnya diimplementasikan sebagai singleton, dan menyediakan global logging access point dalam semua komponen aplikasi tanpa perlu untuk menciptakan sebuah objek setiap kali operasi logging dilakukan.<br><strong>Konfigurasi aplikasi<\/strong><br>Pola Singleton digunakan untuk merancang kelas yang menyediakan pengaturan konfigurasi untuk aplikasi. Menerapkan kelas konfigurasi sebagai Singleton tidak hanya menyediakan titik akses global, tetapi juga menggunakan instance sebagai \u201ccache\u201d untuk objek.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-contoh-program-singleton-menggunakan-java-gui-java-swing-framework\">Contoh Program Singleton menggunakan Java GUI (Java Swing Framework)<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-studi-kasus-singleton-principle\">Studi Kasus Singleton Principle<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Bagaimana agar ketika memanipulasi satu \u201cdata\u201d, data tersebut sama di semua kelas atau dapat diakses secara global. Nilai data tersebut apabila dimanipulasi di satu instansi maka nilainya akan berubah secara global.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Logic dari kasus tersebut :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dibuat kelas singleton, yang berisi data tersebut, di sini anggap saja data tersebut berupa String.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Di sini kelas Singleton akan mereferensikan kelasnya sendiri kemudian memastikan dan membatasi instance class hanya satu, atau dengan kata lain tidak boleh ada dua object untuk class tersebut. Karena itu ketika singleton dipanggil diluar kelas menjadi banyak objek, nilai dari String yang dikelola tetaplah sama, apabila diakses dengan titik point method global yaitu getInstance.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-boiler-kode-program-singleton-menggunakan-swing-gui\">Boiler Kode Program Singleton menggunakan Swing GUI<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SingletonClassExample<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SingletonClassExample {\n    \/\/ single_instance variabel statis tipe Singleton\n    private static SingletonClassExample single_instance = null;\n    \/\/ variabel tipe String\n    public String myText;\n    \/\/ konstruktor pribadi terbatas pada kelas ini sendiri (tidak ada kelas lain yang dapat mengakses)\n    private SingletonClassExample()\n    {\n        myText = \"Hallo saya String punya kelas singleton\";\n    }\n    \/\/ metode statis untuk membuat instance dari kelas Singleton\n    public static SingletonClassExample getInstance()\n    {\n        if (single_instance == null)\n            single_instance = new SingletonClassExample();\n        return single_instance;\n    }\n}\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Di sini data String myText tidak bisa dimanipulasi kecuali oleh kelas singleton, karena aksesnya berada dalam konstruktor dengan akses private. getInstance() bertanggung jawab untuk membuat instance unik dari kelasnya jika belum dibuat dan mengembalikan instance tersebut.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Menampilkan hasil string pada setiap instance pada kelas <code data-enlighter-language=\"java\" class=\"EnlighterJSRAW\">ListInstancesFrame<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ListInstacesFrame extends javax.swing.JFrame {\n    \/**\n     * Creates new form FirstFrame\n     *\/\n    public ListInstacesFrame() {\n        initComponents();\n        createList();\n    }\n    \n    private void createList(){\n        \/\/ instantiating Singleton class with variable x\n        SingletonClassExample x = SingletonClassExample.getInstance();\n        \/\/ instantiating Singleton class with variable y\n        SingletonClassExample y = SingletonClassExample.getInstance();\n        \/\/ instantiating Singleton class with variable z\n        SingletonClassExample z = SingletonClassExample.getInstance();\n        DefaultListModel&lt;String> StringList = new DefaultListModel&lt;>();\n        StringList.addElement(\"String dari x is \" + x.myText);\n        StringList.addElement(\"String dari y is \" + y.myText);\n        StringList.addElement(\"String dari z is \" + z.myText);\n        jList1.setModel(StringList);\n    }\n    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {\/\/GEN-FIRST:event_jButton1ActionPerformed\n        \/\/ TODO add your handling code here:\n        new ManipulateStringFrame().setVisible(true);;\n        dispose();\n    }\/\/GEN-LAST:event_jButton1ActionPerformed\n    \/**\n     * @param args the command line arguments\n     *\/\n    public static void main(String args[]) {\n        java.awt.EventQueue.invokeLater(new Runnable() {\n            public void run() {\n                new ListInstacesFrame().setVisible(true);\n            }\n        });\n    }\n    \/\/ Variables declaration - do not modify\/\/GEN-BEGIN:variables\n    private javax.swing.JButton jButton1;\n    private javax.swing.JList&lt;String> jList1;\n    private javax.swing.JScrollPane jScrollPane1;\n    \/\/ End of variables declaration\/\/GEN-END:variables\n}\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Di sini terdapat tiga objek singleton yang berbeda yang disimpan dalam method createList(). Kemudian variable string myText pada tiga objek singleton tersebut dipanggil dan dimasukkan dalam jList1 agar dapat tampil dalam frame.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"322\" height=\"278\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-4.png\" alt=\"Java GUI Demo of Singleton Implementation Example\" class=\"wp-image-2580\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-4.png 322w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-4-300x259.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">EventHandler Button <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">jButton1ActionPerformed <\/code>ketika diklik akan menuju ke frame manipulasi String dan mendispose frame dari ListInstancesFrame.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Boiler Kode ManipulateStringFrame<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ManipulateStringFrame extends javax.swing.JFrame {\n    \n    \/**\n     * Creates new form ManipulateInstaceFrame\n     *\/\n    public ManipulateStringFrame() {\n        initComponents();\n    }\nprivate void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {\/\/GEN-FIRST:event_jButton1ActionPerformed\n    \/\/ TODO add your handling code here:\n    SingletonClassExample a = SingletonClassExample.getInstance();\n    a.myText = (a.myText).toUpperCase();\n    new ListInstacesFrame().setVisible(true);\n    dispose();\n}\/\/GEN-LAST:event_jButton1ActionPerformed\nprivate void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {\n    \/\/ TODO add your handling code here:\n    SingletonClassExample b = SingletonClassExample.getInstance();\n    b.myText = (b.myText).toLowerCase();\n    new ListInstacesFrame().setVisible(true);\n    dispose();\n}\n    public static void main(String args[]) {\n        \/* Create and display the form *\/\n        java.awt.EventQueue.invokeLater(new Runnable() {\n            public void run() {\n                new ManipulateStringFrame().setVisible(true);\n            }\n        });\n    }\n    \/\/ Variables declaration - do not modify\/\/GEN-BEGIN:variables\n    private javax.swing.JButton jButton1;\n    private javax.swing.JButton jButton2;\n    \/\/ End of variables declaration\/\/GEN-END:variables\n}\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Untuk pembuktian bahwa Singleton memberi data global, dibuat dua objek singleton lagi yang berbeda. Satu di dalam method <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">jButton1ActionPerformed <\/code>dan satu di <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">jButton2ActionPerformed<\/code>. Kemudian String yang ada pada tiap objek singleton dimanipulasi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-demo-program-swing-gui\">Demo Program Swing GUI<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"322\" height=\"278\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-5.png\" alt=\"Java GUI demo String Manipulation Globally using Singleton\" class=\"wp-image-2581\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-5.png 322w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-5-300x259.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Ketika kita menekan tombol manipulasi String, maka akan muncul jendela baru berikut<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"322\" height=\"277\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-6.png\" alt=\"Java GUI Design Pattern Singleton Principle\" class=\"wp-image-2582\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-6.png 322w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-6-300x258.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Hasil String saat di upper case<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"322\" height=\"278\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-7.png\" alt=\"Java GUI Design Pattern Singleton\" class=\"wp-image-2585\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-7.png 322w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-7-300x259.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Hasil String saat di lower case<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"322\" height=\"278\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-8.png\" alt=\"\" class=\"wp-image-2586\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-8.png 322w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-8-300x259.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Di sini dapat dilihat nilai String setiap instance singleton sama, baik sebelum dimanipulasi dan sesudah dimanipulasi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-masalah-pada-singleton-dan-mengapa-singleton-design-pattern-adalah-anti-pattern\">Masalah pada Singleton dan Mengapa Singleton Design Pattern adalah anti pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ada perdebatan singleton bukan design pattern, bahkan singleton dianggap antipattern, alasannya karena kelas singleton melanggar prinsip single responsibility prinsiple yaitu selain menghandle life cycle atau state dari kelasnya, kalau kalian melihat ThreadOptimizedSingleton, kelas ini juga menghandle beberapa variable yaitu variable value. Tetapi, kenapa banyak framework yang menggunakan Singleton seperti Spring Core, Dagger? Dan untuk life cycle bisa didebat bahwa secara naluri, singleton hanya membuat kelasnya menjadi \u201cstateless\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Singleton juga menjadi permasalahan pada aplikasi multithreading. Tentu ada cara untuk mengakali kasus multithreading ini, namun sering kali membuat sebuah kode yang kompleks untuk suatu kasus yang sederhana (which sering kali menjadi jurus debat oleh developer yang anti dengan singleton design pattern).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-perbaikan-penerapan-kode-design-pattern-singleton-yang-efisien\">Perbaikan Penerapan Kode Design Pattern Singleton yang Efisien<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ada banyak cara untuk implementasi singleton, hanya tinggal konsep singleton terbaik apa yang kamu ingin terapkan. Singleton sendiri sangat rentan dalam multithreading, karena akan ada kemungkinan lebih dari satu thread mengakses satu instance sehingga menyebabkan lebih dari satu instance singleton dibuat. Solusi singleton agar dapat berjalan di multithread adalah menggunakan enumeration. Sekarang kita akan membuat singleton dengan optimisasi multi thread<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Enum Singleton<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">enum class MyEnumSingleton {\n    INSTANCE;\n    var value = 0\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kelas Client<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Client {\n    companion object{\n        @JvmStatic\n        fun main(args: Array&lt;String>) {\n            val singleton = MyEnumSingleton.INSTANCE\n            singleton.value = 4\n            println(singleton.value)\n            val singleton2 = MyEnumSingleton.INSTANCE\n            println(singleton2.value)\n            singleton.value = 8\n            println(singleton.value)\n            println(singleton2.value)\n        }\n    }\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"349\" height=\"109\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-9.png\" alt=\"Singleton Thread Optimized Demo\" class=\"wp-image-2587\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-9.png 349w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-9-300x94.png 300w\" sizes=\"(max-width: 349px) 100vw, 349px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Berbeda dengan objek pada umumnya, inisialisasi enum dilakukan di JVMnya sehingga tidak akan ada inisialisasi tambahan yang dilakukan oleh pemanggilan thread sehingga hanya akan ada satu instance saja. Permasalahan dari singleton enumeration adalah kamu akan kehilangan semua data kalau kamu melakukan deinisialisasi objek. Selain menggunakan enum, kamu bisa menggunakan static deklarator sebagai alternatif optimisasi singleton untuk multi thread.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Selain itu, kamu juga bisa membuat thread safe singleton dengan contoh kotlin seperti berikut<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ThreadOptimizedSingleton {\n    var value = 0\n    companion object{\n        @Volatile\n        private var instance: ThreadOptimizedSingleton? = null\n    }\n    fun getInstance(): ThreadOptimizedSingleton? {\n        if (instance != null) return instance\n        synchronized(ThreadOptimizedSingleton::class.java) {\n            if (instance == null) {\n                instance = ThreadOptimizedSingleton()\n            }\n        }\n        return instance\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Terkadang, thread pertama yang mengakses singleton sedang berada pada task pengecekan apakah instance tersedia atau tidak, kemudian karena instance masih null maka thread pertama tersebut akan membuat instance, namun tiba-tiba thread pertama melakukan sleep sehingga pembuatan instance terhenti sementara.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Di saat bersamaan thread kedua melakukan cek instance, karena thread pertama belum sempat membuat instance, maka thread kedua lanjut membuat instance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Saat thread pertama bangun, ia tidak akan mengecek kembali apakah instance singleton masih null atau sudah ada, namun langsung membuat instance singleton. Sehingga akan ada problem muncul: dua global objek class singleton.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dengan menggunakan kotlin thread optimized singleton example di atas, akan dilakukan lock multithread menggunakan synchronized pada variable instance sehingga hanya ada satu thread saja yang mengakses instance. Kemudian volatile digunakan agar thread melakukan pengecekan lebih dari sekali untuk variable instance.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">val threadOptimizedSingleton = ThreadOptimizedSingleton().getInstance()\nthreadOptimizedSingleton!!.value = 6\nval threadOptimizedSingleton2 = ThreadOptimizedSingleton().getInstance()\nprintln(\"\\nthe threadoptimized value = ${threadOptimizedSingleton.value}\")\nprintln(\"\\nthe threadoptimized value = ${threadOptimizedSingleton2!!.value}\")<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"376\" height=\"170\" src=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-10.png\" alt=\"Thread Optimized Singleton Example using Kotlin\" class=\"wp-image-2588\" srcset=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-10.png 376w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-10-300x136.png 300w, https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/image-10-360x163.png 360w\" sizes=\"(max-width: 376px) 100vw, 376px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-kesimpulan\">Kesimpulan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pola Singleton membatasi instantiation kelas dan memastikan bahwa hanya satu instance kelas ada di mesin virtual.<br>Kelas singleton harus menyediakan titik akses global untuk mendapatkan instance kelas.<br>Melalui definisi dan implementasi di atas, pola singleton cocok untuk logging, caching dan berbagi resources.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Terima kasih sudah berkunjung di Nako Info Tekno, untuk tutorial software arsitektur silahkan kunjungi <a title=\"link ini\" href=\"https:\/\/sunaonako.my.id\/blog\/category\/software-architecture\/\" target=\"_blank\" rel=\"noreferrer noopener\">link ini<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Singleton Principle (A class of which only a single instance can exist) termasuk dalam kategori Creational Pattern, yaitu pola atau teknik pemrograman mengenai metode dalam pembuatan object. Singleton pattern adalah design pattern yang digunakan untuk membatasi instanisasi dari suatu kelas menjadi hanya satu object, membatasi sebuah global point of access ke suatu object. Jika kita&#8230;<\/p>\n","protected":false},"author":2,"featured_media":2589,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[288,280,289],"tags":[278,279,290,287],"class_list":["post-2447","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-structure","category-software-architecture","category-software-principle","tag-design-pattern","tag-java-and-kotlin","tag-java-gui","tag-uml"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.8 (Yoast SEO v23.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Menjelaskan Design Pattern Singleton Super Detil dengan GUI<\/title>\n<meta name=\"description\" content=\"Memahamai prinsip dibalik Design Pattern Singleton, permasalahan singleton, cara efektif membuat singleton yang thread safe serta UML, Demo Java GUI + Kotlin\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?\" \/>\n<meta property=\"og:description\" content=\"Memahamai prinsip dibalik Design Pattern Singleton, permasalahan singleton, cara efektif membuat singleton yang thread safe serta UML, Demo Java GUI + Kotlin\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\" \/>\n<meta property=\"og:site_name\" content=\"Hilarious Developer School\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-19T09:56:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-04T09:24:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"nakomin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"nakomin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\"},\"author\":{\"name\":\"nakomin\",\"@id\":\"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a\"},\"headline\":\"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?\",\"datePublished\":\"2022-04-19T09:56:29+00:00\",\"dateModified\":\"2022-11-04T09:24:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\"},\"wordCount\":1364,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a\"},\"image\":{\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png\",\"keywords\":[\"Design Pattern\",\"Java and Kotlin\",\"Java GUI\",\"UML\"],\"articleSection\":[\"Data Structure\",\"Software Architecture\",\"Software Principle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\",\"url\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\",\"name\":\"Menjelaskan Design Pattern Singleton Super Detil dengan GUI\",\"isPartOf\":{\"@id\":\"https:\/\/sunaonako.my.id\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png\",\"datePublished\":\"2022-04-19T09:56:29+00:00\",\"dateModified\":\"2022-11-04T09:24:18+00:00\",\"description\":\"Memahamai prinsip dibalik Design Pattern Singleton, permasalahan singleton, cara efektif membuat singleton yang thread safe serta UML, Demo Java GUI + Kotlin\",\"breadcrumb\":{\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage\",\"url\":\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png\",\"contentUrl\":\"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png\",\"width\":1200,\"height\":628,\"caption\":\"Singleton Full Explanation UML Multi Thread GUI Implementation\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sunaonako.my.id\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sunaonako.my.id\/#website\",\"url\":\"https:\/\/sunaonako.my.id\/\",\"name\":\"Hilarious Developer School\",\"description\":\"Catatan Developer tentang Kurikulum Dunia Modern\",\"publisher\":{\"@id\":\"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sunaonako.my.id\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a\",\"name\":\"nakomin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/sunaonako.my.id\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/cdn.sunaonako.my.id\/aruuploads\/2021\/07\/Minimalist-Letter-Initial-Logo.png\",\"contentUrl\":\"https:\/\/cdn.sunaonako.my.id\/aruuploads\/2021\/07\/Minimalist-Letter-Initial-Logo.png\",\"width\":\"250\",\"height\":\"250\",\"caption\":\"nakomin\"},\"logo\":{\"@id\":\"https:\/\/sunaonako.my.id\/#\/schema\/person\/image\/\"},\"description\":\"Believe at the heart of BNRS Here you will find content about developers needs whether it\u2019s coding tutorials or the lifestyle of employee in the IT circle, understanding of the realm of ui\/ux and futuristic tech for free in one place. Don\u2019t forget to follow the nakotek socials to give the author enthusiasm in pioneering this website. #wahahaforever\",\"sameAs\":[\"https:\/\/sunaonako.my.id\"],\"url\":\"https:\/\/sunaonako.my.id\/tomodachi\/nakomin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Menjelaskan Design Pattern Singleton Super Detil dengan GUI","description":"Memahamai prinsip dibalik Design Pattern Singleton, permasalahan singleton, cara efektif membuat singleton yang thread safe serta UML, Demo Java GUI + Kotlin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/","og_locale":"en_US","og_type":"article","og_title":"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?","og_description":"Memahamai prinsip dibalik Design Pattern Singleton, permasalahan singleton, cara efektif membuat singleton yang thread safe serta UML, Demo Java GUI + Kotlin","og_url":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/","og_site_name":"Hilarious Developer School","article_published_time":"2022-04-19T09:56:29+00:00","article_modified_time":"2022-11-04T09:24:18+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png","type":"image\/png"}],"author":"nakomin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"nakomin","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#article","isPartOf":{"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/"},"author":{"name":"nakomin","@id":"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a"},"headline":"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?","datePublished":"2022-04-19T09:56:29+00:00","dateModified":"2022-11-04T09:24:18+00:00","mainEntityOfPage":{"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/"},"wordCount":1364,"commentCount":0,"publisher":{"@id":"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a"},"image":{"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage"},"thumbnailUrl":"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png","keywords":["Design Pattern","Java and Kotlin","Java GUI","UML"],"articleSection":["Data Structure","Software Architecture","Software Principle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/","url":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/","name":"Menjelaskan Design Pattern Singleton Super Detil dengan GUI","isPartOf":{"@id":"https:\/\/sunaonako.my.id\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage"},"image":{"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage"},"thumbnailUrl":"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png","datePublished":"2022-04-19T09:56:29+00:00","dateModified":"2022-11-04T09:24:18+00:00","description":"Memahamai prinsip dibalik Design Pattern Singleton, permasalahan singleton, cara efektif membuat singleton yang thread safe serta UML, Demo Java GUI + Kotlin","breadcrumb":{"@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#primaryimage","url":"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png","contentUrl":"https:\/\/sunaonako.my.id\/aruuploads\/2022\/04\/Singleton-Kotlin-and-Swing.png","width":1200,"height":628,"caption":"Singleton Full Explanation UML Multi Thread GUI Implementation"},{"@type":"BreadcrumbList","@id":"https:\/\/sunaonako.my.id\/blog\/contoh-design-pattern-singleton-menggunakan-java-swing-apa-itu-singleton\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sunaonako.my.id\/"},{"@type":"ListItem","position":2,"name":"Contoh Design Pattern Singleton menggunakan Java GUI, Apa itu Singleton?"}]},{"@type":"WebSite","@id":"https:\/\/sunaonako.my.id\/#website","url":"https:\/\/sunaonako.my.id\/","name":"Hilarious Developer School","description":"Catatan Developer tentang Kurikulum Dunia Modern","publisher":{"@id":"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sunaonako.my.id\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/sunaonako.my.id\/#\/schema\/person\/e35d0cb9128a86b66ec2ba6abacadd5a","name":"nakomin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sunaonako.my.id\/#\/schema\/person\/image\/","url":"https:\/\/cdn.sunaonako.my.id\/aruuploads\/2021\/07\/Minimalist-Letter-Initial-Logo.png","contentUrl":"https:\/\/cdn.sunaonako.my.id\/aruuploads\/2021\/07\/Minimalist-Letter-Initial-Logo.png","width":"250","height":"250","caption":"nakomin"},"logo":{"@id":"https:\/\/sunaonako.my.id\/#\/schema\/person\/image\/"},"description":"Believe at the heart of BNRS Here you will find content about developers needs whether it\u2019s coding tutorials or the lifestyle of employee in the IT circle, understanding of the realm of ui\/ux and futuristic tech for free in one place. Don\u2019t forget to follow the nakotek socials to give the author enthusiasm in pioneering this website. #wahahaforever","sameAs":["https:\/\/sunaonako.my.id"],"url":"https:\/\/sunaonako.my.id\/tomodachi\/nakomin\/"}]}},"_links":{"self":[{"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/posts\/2447","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/comments?post=2447"}],"version-history":[{"count":1,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/posts\/2447\/revisions"}],"predecessor-version":[{"id":3501,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/posts\/2447\/revisions\/3501"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/media\/2589"}],"wp:attachment":[{"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/media?parent=2447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/categories?post=2447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sunaonako.my.id\/apps-api\/wp\/v2\/tags?post=2447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}