Encapsulation
Melindungi data agar aman dan terstruktur menggunakan Access Modifier.
1. Pengantar & Analogi Dunia Nyata
Pernah kebayang gak kalau nilai IPK kamu bisa diubah-ubah seenaknya sama teman yang iseng, cuma dengan inspect element atau nulis satu baris kode? Bahaya banget, kan?
Di dunia OOP, kita punya konsep Encapsulation. Ini mirip banget sama Portal Akademik kampus.
Kamu gak bisa langsung ngubah angka di database nilai seenaknya. Kamu cuma bisa melihat nilai (get) atau mengubah nilai (set) lewat jalur resmi (Dosen -> Input Nilai -> Validasi Sistem).
Analogi Portal Akademik
Jalur resmi inilah yang menjaga agar data tetap valid (misal: gak mungkin IPK > 4.00) dan aman dari tangan-tangan jahil.
2. Konsep Teknis
Encapsulation adalah mekanisme untuk menyembunyikan detail implementasi dari pengguna luar, dan hanya menyediakan antarmuka (interface) yang diperlukan.
Tujuannya:
- Keamanan Data: Mencegah akses langsung ke variabel sensitif.
- Validasi: Memastikan data yang masuk sesuai aturan.
- Fleksibilitas: Kita bisa mengubah kode di dalam tanpa merusak kode di luar yang menggunakannya.
Read-Only vs Write-Only
Dengan Encapsulation, kita bisa mengontrol akses data secara granular:
- Read-Only: Cuma kasih Getter, jangan kasih Setter. (Contoh: NIM mahasiswa, sekali dibuat gak bisa diubah).
- Write-Only: Cuma kasih Setter, jangan kasih Getter. (Contoh: Upload Password baru, sistem simpan tapi gak boleh ditampilkan lagi).
- Full Access: Kasih Getter dan Setter. (Contoh: Alamat kos, bisa dilihat dan diubah).
3. Komponen Utama
A. Access Modifiers
Kata kunci untuk mengatur siapa yang boleh akses data/method ini:
| Modifier | Deskripsi | Akses | Analogi |
|---|---|---|---|
private | Paling ketat. | Cuma bisa diakses dari dalam class itu sendiri. | Rahasia dapur restoran. |
protected | Moderat. | Bisa diakses dari package yang sama dan subclass (meski beda package). | Resep rahasia keluarga (anak boleh tahu). |
public | Terbuka. | Bisa diakses dari mana saja (seluruh dunia). | Menu makanan di meja. |
Warning
Jangan pernah membuat variabel data (seperti saldo, password, ipk) bersifat public kecuali benar-benar diperlukan. Ini membuka celah keamanan!
B. Getter (Accessor)
Method public untuk membaca nilai variabel private. Biasanya diawali dengan kata get (atau is untuk boolean).
C. Setter (Mutator)
Method public untuk mengubah nilai variabel private. Di sinilah tempat kita menaruh logika validasi. Biasanya diawali dengan kata set.
4. Studi Kasus Koding (Java)
Mari kita bikin simulasi transkrip nilai (AcademicRecord) yang menerapkan konsep Read-Only pada NIM dan Validasi pada IPK.
File 1: AcademicRecord.java (Class)
public class AcademicRecord {
// 1. DATA PRIVAT (Rahasia)
private String nim; // NIM bersifat Read-Only
private String nama;
private double ipk;
// 2. CONSTRUCTOR
public AcademicRecord(String nim, String nama) {
this.nim = nim; // NIM di-set sekali di awal
this.nama = nama;
this.ipk = 0.0;
}
// 3. GETTER (Akses Baca)
// NIM cuma punya Getter, gak punya Setter -> READ ONLY
public String getNim() {
return this.nim;
}
public String getNama() {
return this.nama;
}
public double getIpk() {
return this.ipk;
}
// 4. SETTER (Akses Tulis dengan Validasi)
// Setter cuma buat IPK, NIM gak boleh diubah!
public void setIpk(double nilaiBaru) {
// VALIDASI: IPK harus antara 0.0 sampai 4.0
if (nilaiBaru >= 0.0 && nilaiBaru <= 4.0) {
this.ipk = nilaiBaru;
System.out.println("✅ Berhasil: IPK " + nama + " diperbarui menjadi " + nilaiBaru);
} else {
System.out.println("❌ Gagal: Nilai IPK tidak valid! Harus 0.0 - 4.0");
}
}
}File 2: Main.java (Eksekusi)
public class Main {
public static void main(String[] args) {
AcademicRecord record = new AcademicRecord("12345", "Budi Santoso");
// 1. COBA UBAH NIM (Ilegal)
// record.nim = "99999"; // ❌ ERROR! Variable private.
// record.setNim("99999"); // ❌ ERROR! Method tidak ada (Read-Only).
// 2. AKSES LEWAT JALUR RESMI
System.out.println("Mahasiswa: " + record.getNama() + " (" + record.getNim() + ")");
// 3. Update IPK dengan Validasi
record.setIpk(3.85); // Output: ✅ Berhasil...
record.setIpk(5.00); // Output: ❌ Gagal...
System.out.println("IPK Akhir: " + record.getIpk());
}
}5. Bedah Kode
private String nim;: Variabelnimdikunci rapat.- Tidak ada
setNim(): Ini membuatnimbersifat Immutable (tak bisa diubah) setelah object dibuat lewat Constructor. Ini meniru dunia nyata: NIM tidak berubah sampai lulus. public void setIpk(...): Ini adalah pintu masuk resmi. Di dalamnya adaif (nilaiBaru >= 0.0 && ...)yang bertindak sebagai satpam/validator. Kalau lolos, baru data diubah.record.setIpk(5.0): Saat kita coba masukkan angka 5.0, validator menolak, sehingga nilaiipkasli tetap aman (3.85).
Manfaat Validasi
Dengan Encapsulation, kita bisa menjamin bahwa object AcademicRecord tidak akan pernah memiliki nilai IPK yang tidak masuk akal (seperti minus atau lebih dari 4.0).
6. Latihan
Sebuah bank digital ingin meningkatkan keamanan sistem mereka. Saldo nasabah tidak boleh diubah secara langsung (di-hack), melainkan harus melalui proses validasi deposit yang sah.
Buatlah class BankAccount dengan spesifikasi berikut:
1. Attributes (Private)
saldo(int): Menyimpan uang nasabah. Nilai awal0.- Wajib Private agar tidak bisa diakses langsung dari luar.
2. Method (Public)
deposit(int jumlah):- Jika
jumlah > 0: Tambahkan ke saldo, lalu cetak:Deposit berhasil. Saldo: <saldo> - Jika
jumlah <= 0: Tolak transaksi, cetak:Deposit gagal! Jumlah harus lebih dari 0.
- Jika
getSaldo(): Mengembalikan nilai saldo saat ini.
Output yang Diharapkan
Kasus Valid:
Deposit berhasil. Saldo: 500000Kasus Invalid:
Deposit gagal! Jumlah harus lebih dari 0.7. Kesimpulan
Encapsulation itu soal kontrol. Kamu sebagai pembuat Class memegang kendali penuh atas data kamu.
- Gunakan
privateuntuk data sensitif. - Gunakan Getter/Setter untuk akses terkontrol.
- Hapus Setter jika ingin membuat data yang permanen (Read-Only).
Dengan begini, kode kamu jadi lebih aman, rapi, dan minim bug akibat data yang tidak valid.
Selanjutnya, kita akan belajar bagaimana cara mewariskan atribut dan method ke class lain tanpa harus menulis ulang kodenya: Inheritance.