Lompat ke konten Lompat ke sidebar Lompat ke footer

Static dan Dynamic Binding Java dan Fungsinya

Dalam artikel ini akan dijelaskan perbandingan antara static binding dan dynamic binding dalam bahasa pemrograman Java.


Sebelum mempelajari materi tentang Static dan Dynamic Binding Java dan Fungsinya, terlebih dahulu pelajari materi tentang: Program Block Static Java dan Fungsinya, Block Inisialisasi Java dan Fungsinya, dan Cara Inisialisasi Block Instance Java dan Fungsinya.

Dalam pemrograman berorientasi objek, "binding" adalah proses menghubungkan pemanggilan metode atau variabel ke implementasinya. Dalam Java, ada dua jenis binding yang penting untuk dipahami: static binding dan dynamic binding. Keduanya memiliki peran dan fungsi yang berbeda dalam perilaku program Java.

Static Binding: binding yang dapat diselesaikan pada saat waktu kompilasi oleh kompilator dikenal sebagai static atau early bindingBinding dari method staticprivate, dan final diselesaikan pada waktu kompilasi program.

Static binding, juga dikenal sebagai early binding, terjadi saat referensi variabel atau metode terikat (bind) ke implementasinya pada saat kompilasi. Ini berarti bahwa compiler mengetahui dengan pasti metode mana yang akan dipanggil sebelum program dijalankan.

Contoh:

class Animal {


void sound() {

System.out.println("Animal

makes a sound");}

}


class Dog extends Animal {

void sound() {

System.out.println("Dog 

barks");}

}


public class Main {


public static void 

main(String[] args) {

// Polymorphism

Animal animal = new Dog(); 

// Panggilan metode

animal.sound(); }


}

Berdasarkan contoh yang diperlihatkan sebelumnya, sound() adalah metode yang diikat secara statis karena compiler mengetahui bahwa variabel animal adalah objek dari kelas Dog dan akan memanggil metode sound() dari kelas Dog.

Binding dari Method StaticFinal, dan Private Selalu Static

Static binding memiliki performa yang lebih baik karena tidak ada overhead ekstra yang dipersyaratkan dan kompilator mengetahui hal tersebut, bahwa method seperti itu tidak bisa overridden dan selalu dapat diakses oleh object dari class lokal. Karenanya, kompilator tidak memiliki kesulitan apapun untuk menentukan object dari class lokal. Inilah alasan kenapa method binding adalah selalu static.

Contoh: Perhatikan program berikut ini.

public class NewClass 

{

 

public static class superclass 

static void print() 

{System.out.println("dicetak"

+" dalam superclass.");} 

}

 

public static class subclass extends superclass 

static void print() 

{System.out.println("dicetak"

+" dalam subclass.");} 

 

public static void main(String[] args

{superclass A = new superclass(); 

superclass B = new subclass(); 

A.print(); 

B.print();} 

}

Output:
dicetak dalam superclass.
dicetak dalam superclass.

Seperti yang terlihat dalam kedua kasus method print dari superclass yang dipanggil sebelumnya. Makan, perhatikan kenapa hal tersebut dapat terjadi:
  • Dapat diciptakan satu object dari subclass dan satu object dari superclass dengan referensi dari superclass.
  • Ketika method print dari superclass adalah static, maka kompilator dapat mengetahui bahwa method tersebut tidak akan overridden dalam subclass dan karenya kompilator dapat mengenali hal tersebut, maka selama waktu kompilasi, method print akan dipanggil dan tidak akan terjadi ambiguitas sama sekali.

Baca Juga:

Pada latihan berikut ini, nilai referensi dapat diubah dari object B menuju subclass dan memeriksa hasil output-nya.

Dynamic Binding: pada dynamic binding kompilator tidak memutuskan method mana yang akan dipanggil. Overriding adalah sebuah contoh sempurna dari dynamic binding. Dalam overriding kedua parent dan child class memiliki method yang sama.

Dynamic binding, juga dikenal sebagai late binding, terjadi saat referensi variabel atau metode terikat ke implementasinya pada saat runtime. Hal ini memungkinkan pemilihan metode yang tepat dilakukan saat runtime, berdasarkan jenis objek yang sebenarnya dibuat pada saat itu.

Contoh:

class Animal {

void sound() {

System.out.println("Animal 

makes a sound");}

}


class Dog extends Animal {

void sound() {        System.out.println("Dog barks");}

}


public class Main {


public static void 

main(String[] args) {

Animal animal = getAnimal();

// Panggilan metode

animal.sound();}


static Animal getAnimal() {

return new Dog();}

}

Berdasarkan contoh yang diperlihatkan sebelumnya, sound() adalah metode yang diikat secara dinamis karena compiler tidak tahu secara pasti objek apa yang dikembalikan oleh getAnimal() pada saat kompilasi. Pemilihan metode yang tepat terjadi saat runtime, ketika objek sebenarnya dibuat.

Contoh: Perhatikan program berikut ini.

public class NewClass 

 

public static class superclass 

void print() 

{System.out.println("dicetak"

+" dalam superclass.");} 

 

public static class subclass extends superclass 

@Override

void print() 

{System.out.println("dicetak"

+" dalam subclass.");} 

 

public static void main(String[] args

{superclass A = new superclass(); 

superclass B = new subclass(); 

A.print(); 

B.print();} 

}

Output:
dicetak dalam superclass.
dicetak dalam subclass.

Hasil dari output memiliki keluaran yang berbeda, karena:
  • Pada contoh program method tidak static.
  • Selama kompilasi, kompilator tidak memiliki gagasan method print mana yang akan dipanggil ketika kompilator hanya memiliki variabel referensi saja dan tidak oleh tipe dari object. Dan karena hal tersebut, maka binding akan ditunda menuju ke runtime dan versi koresponden dari print akan dipanggil berdasarkan tipe object-nya.

Point penting:
  • Anggota privatefinal, dan static  yang berupa method dan variabel menggunakan static binding sementara untuk method virtual pada method Java virtual yang bersifat default, binding dilakukan selama runtime berdasarkan runtime object.
  • Static binding menggunakan tipe informasi untuk binding sementara dynamic binding menggunakan object untuk menyelesaikan binding.
  • Overloaded method dapat diselesaikan dengan memutuskan method mana yang akan dipanggil ketika terdapat lebih dari satu method dengan nama sama menggunakan static binding, sementara overridden method menggunakan dynamic binding saat runtime.

Fungsi dan Keuntungan:
  • Static Binding:
    • Efisiensi: Karena binding terjadi pada saat kompilasi, itu bisa lebih efisien daripada dynamic binding.
    • Keamanan: Karena semua binding dilakukan pada saat kompilasi, kesalahan terkait pemanggilan metode bisa dideteksi lebih awal.
    • Prediktabilitas: Behavior program bisa diprediksi dengan lebih baik karena binding telah ditentukan sebelumnya.
  • Dynamic Binding:
    • Polimorfisme: Mendorong polimorfisme dalam kode, memungkinkan kelas turunan untuk mengganti perilaku metode yang diwarisi dari kelas dasar.
    • Fleksibilitas: Memungkinkan pemilihan metode yang tepat tergantung pada jenis objek yang sebenarnya dibuat pada saat runtime, memberikan fleksibilitas yang lebih besar dalam desain program.
    • Ekstensibilitas: Membuat kode lebih mudah untuk diubah dan diperluas karena perilaku metode bisa ditentukan secara dinamis.

Meskipun static binding dan dynamic binding memiliki banyak keuntungan, ada beberapa kekurangan yang perlu dipertimbangkan:
  • Kekurangan Static Binding:
    • Keterbatasan Polimorfisme: Static binding membatasi kemampuan polimorfisme karena metode yang dipanggil ditentukan oleh tipe referensi pada saat kompilasi. Ini berarti bahwa jika pengembang memiliki referensi dari kelas induk, bahkan jika objek yang sebenarnya dibuat adalah turunan dari kelas tersebut, hanya metode yang ditentukan oleh kelas induk yang dapat dipanggil. Ini dapat mengurangi fleksibilitas dalam kode.
    • Keterbatasan dalam Hierarki Warisan: Dalam hierarki warisan yang kompleks, penggunaan static binding dapat menjadi kurang efektif karena metode yang dipanggil ditentukan oleh tipe referensi, bukan oleh tipe objek yang sebenarnya dibuat. Hal ini dapat menyebabkan kebingungan dan memerlukan penanganan yang lebih rumit dalam beberapa kasus.
  • Kekurangan Dynamic Binding:
    • Kinerja yang Lebih Lambat: Dynamic binding memerlukan pengecekan tipe objek pada saat runtime untuk menentukan metode mana yang harus dipanggil. Hal ini bisa mengakibatkan kinerja yang sedikit lebih lambat dibandingkan dengan static binding, terutama dalam program yang sangat besar atau dalam lingkungan yang memerlukan kinerja tinggi.
    • Kesalahan Pada Waktu Eksekusi: Karena dynamic binding menentukan metode yang akan dipanggil pada saat runtime, jika terjadi kesalahan dalam logika program, kesalahan ini mungkin tidak terdeteksi sampai program dijalankan. Ini dapat menyebabkan debug yang lebih sulit karena kesalahan mungkin tidak muncul sampai di waktu eksekusi.
    • Kesulitan Pemeliharaan: Karena metode yang akan dipanggil ditentukan secara dinamis pada saat runtime, kode yang menggunakan dynamic binding bisa menjadi sulit dipahami dan dipelihara. Terutama dalam lingkungan pengembangan yang besar dan kompleks, dynamic binding dapat menyulitkan untuk melacak alur eksekusi program.

Kesimpulan

Static binding dan dynamic binding adalah dua konsep penting dalam pemrograman Java yang memengaruhi bagaimana metode dan variabel terikat ke implementasinya. Static binding terjadi pada saat kompilasi, sementara dynamic binding terjadi pada saat runtime. Keduanya memiliki peran dan keuntungan masing-masing dalam pengembangan perangkat lunak Java, dan memahaminya penting untuk membuat desain yang kokoh dan efisien.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Adnan Ghiffari, Afriza Prima Safira, Ana Tasya Putri Rahma, Aprillia Puteri Pradana, dan Arum Galuh Saputri.

6 komentar untuk "Static dan Dynamic Binding Java dan Fungsinya"

  1. Apa yang dimaksud dengan static binding pada Java?

    BalasHapus
    Balasan
    1. Static binding pada java adalah mengacu pada pelaksanaan program dimana jenis object ditentukan atau diketahui pada waktu kompilasi program, yaitu ketika kompilator mengeksekusi kode program, maka kompilator akan mengetahui jenis object atau class yang dimiliki oleh object tersebut.

      Hapus
  2. Bagaimana cara static binding bekerja pada Java?

    BalasHapus
    Balasan
    1. Static binding terjadi pada waktu kompilasi sementara dimana dynamic binding terjadi pada waktu proses tersebut. Ketika proses overriding terjadi dan referensi jenis tipe parent ditetapkan oleh object dari jenis instance class, dimana proses binding tersebut diselesaikan selama waktu proses dijalankan pada Java.

      Hapus
  3. Apa yang dimaksud dengan dynamic binding pada Java?

    BalasHapus
    Balasan
    1. Dalam dynamic binding Java, method call terikat pada body method ketika runtime dijalankan. Hal ini juga dikenal sebagai late binding, yang dilakukan dengan menggunakan method instance.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -