Enkapsulasi adalah konsep dalam Pemrograman Berorientasi Objek yang bertujuan:
Menyembunyikan data (data hiding) dan membatasi akses ke atribut melalui method (getter & setter).
Dengan enkapsulasi, data dalam objek lebih aman karena tidak dapat dimodifikasi secara langsung dari luar class.
A. Karakteristik Enkapsulasi
1. Atribut dibuat private
2. Akses atribut melalui:
Getter → untuk mengambil data
Setter → untuk mengubah data
3. Menggunakan access modifier:
private→ hanya bisa diakses dari dalam class itu sendiripublic→ bisa diakses dari luarprotected→ dapat diakses oleh class turunan
B. Contoh Kasus (Sederhana)
❌ Tanpa Enkapsulasi
public class Siswa {String nama; // langsung bisa diakses = tidak amanint umur;}
Dari luar class:
Siswa s = new Siswa();s.umur = -5; // ERROR LOGIKA: umur tidak boleh minus
Data tidak aman → inilah alasan enkapsulasi dibutuhkan.
C. Contoh Enkapsulasi yang Benar (Dengan Getter & Setter)
public class Siswa {private String nama;private int umur;public void setNama(String nama) {this.nama = nama;}public String getNama() {return nama;}public void setUmur(int umur) {if(umur > 0 && umur < 100){this.umur = umur;} else {System.out.println("Umur tidak valid!");}}public int getUmur() {return umur;}}
Pembahasan:
- Atribut nama dan umur dibuat private → tidak bisa diakses langsung.
- Atribut diakses lewat public method:
- setNama() dan setUmur() untuk memberi nilai
- getNama() dan getUmur() untuk mengambil nilai
- Pada setUmur(), ada logika validasi → mencegah data tidak valid.
D. Class Main (Pengujian)
public class Main {public static void main(String[] args) {Siswa s = new Siswa();s.setNama("Budi");s.setUmur(16);System.out.println("Nama : " + s.getNama());System.out.println("Umur : " + s.getUmur());// uji validasis.setUmur(-5);}}
Output
Nama : BudiUmur : 16Umur tidak valid!
E. Studi Kasus Enkapsulasi – Tingkat Menengah
Kasus: Enkapsulasi Data Rekening Bank
Class RekeningBank
public class RekeningBank {private String pemilik;private double saldo;public RekeningBank(String pemilik, double saldoAwal){this.pemilik = pemilik;this.saldo = saldoAwal;}public String getPemilik(){return pemilik;}public double getSaldo(){return saldo;}public void setor(double jumlah){saldo += jumlah;}public void tarik(double jumlah){if(jumlah > saldo){System.out.println("Saldo tidak cukup!");} else {saldo -= jumlah;}}}
Pembahasan:
✔ Data tidak bisa diakses langsung
✔ Setiap transaksi melalui method → lebih aman
✔ Validasi saldo melindungi objek dari kesalahan logika
F. Contoh Pola Enkapsulasi yang Baik (Best Practice)
- Atribut selalu private
- Getter/Setter wajib ada jika atribut perlu diakses
- Beri validasi pada setter
- Gunakan konvensi penamaan Java (camelCase)
- Bedakan state dan behavior
G. Perbedaan Enkapsulasi dengan Konsep PBO Lain
| Konsep | Fungsi | Contoh |
|---|---|---|
| Enkapsulasi | Lindungi data | getter, setter |
| Abstraksi | Sederhanakan kompleksitas | abstract class |
| Inheritance | Pewarisan class | class A extends B |
| Polimorfisme | Banyak bentuk | override/overload |
Tags
PBTGM