🔒 Encapsulation (Enkapsulasi) dalam Java¶
Encapsulation (enkapsulasi) adalah pilar utama Object-Oriented Programming (OOP) yang menggabungkan data (field) dan method dalam satu unit (class) sambil menyembunyikan detail implementasi dari dunia luar. Dengan enkapsulasi, data hanya dapat diakses melalui method tertentu, seperti getter dan setter, untuk memastikan keamanan dan validasi.
Tujuan Enkapsulasi¶
- Melindungi Data: Mencegah perubahan data yang tidak sah.
- Mengontrol Akses: Mengatur bagaimana dan kapan data dapat diakses atau diubah.
- Meningkatkan Perawatan: Memudahkan perubahan logika tanpa memengaruhi kode lain.
🧱 Struktur Enkapsulasi¶
Untuk menerapkan enkapsulasi di Java:
1. Deklarasikan field sebagai private untuk menyembunyikan dari akses langsung.
2. Sediakan method public (getter dan setter) untuk mengakses dan memodifikasi data.
3. (Opsional) Tambahkan logika validasi dalam setter untuk memastikan integritas data.
Contoh Class dengan Enkapsulasi:¶
public class Mahasiswa {
// Field private untuk enkapsulasi
private String nama;
private int umur;
// Getter untuk nama
public String getNama() {
return nama;
}
// Setter untuk nama
public void setNama(String nama) {
this.nama = nama;
}
// Getter untuk umur
public int getUmur() {
return umur;
}
// Setter untuk umur dengan validasi
public void setUmur(int umur) {
if (umur >= 0) {
this.umur = umur;
} else {
System.out.println("Umur tidak valid!");
}
}
}
🔍 Penggunaan di Kelas Lain¶
public class MahasiswaDemo {
public static void main(String[] args) {
Mahasiswa mhs = new Mahasiswa();
mhs.setNama("Marno");
mhs.setUmur(21);
mhs.setUmur(-5); // Akan menampilkan pesan error
System.out.printf("Nama: %s, Umur: %d%n", mhs.getNama(), mhs.getUmur());
}
}
🖨️ Output:
Umur tidak valid!
Nama: Marno, Umur: 21
❗ Mengapa Menggunakan private?¶
Dengan menjadikan field private, data tidak dapat diakses atau diubah langsung dari luar class, mencegah perubahan yang tidak diinginkan.
Contoh Akses Langsung yang Salah:¶
public class MahasiswaErrorDemo {
public static void main(String[] args) {
Mahasiswa mhs = new Mahasiswa();
// mhs.nama = "Marno"; // ❌ Error: 'nama' has private access
}
}
💡 Info: Enkapsulasi memastikan bahwa data hanya diubah melalui setter, yang dapat mencakup logika validasi.
✅ Keuntungan Enkapsulasi¶
| Keuntungan | Penjelasan |
|---|---|
| Keamanan Data | Hanya method getter/setter yang dapat mengakses data. |
| Validasi Nilai | Setter dapat memeriksa nilai sebelum menyimpan (misalnya, umur ≥ 0). |
| Mudah Perawatan | Perubahan logika hanya dilakukan di getter/setter, tidak memengaruhi kode lain. |
| Modularitas | Kode lebih terorganisir dan mudah dipahami. |
🧠 Studi Kasus: Validasi Umur Siswa¶
Berikut adalah contoh enkapsulasi dengan validasi ketat untuk umur siswa, memastikan umur berada dalam rentang yang sesuai untuk siswa sekolah.
public class Siswa {
// Field private
private int umur;
// Setter dengan validasi
public void setUmur(int umur) {
if (umur >= 5 && umur <= 18) {
this.umur = umur;
System.out.println("Umur berhasil diatur ke: " + umur);
} else {
System.out.println("Umur tidak valid! Harus antara 5 dan 18 tahun.");
}
}
// Getter
public int getUmur() {
return umur;
}
}
Penggunaan:¶
public class SiswaDemo {
public static void main(String[] args) {
Siswa siswa = new Siswa();
siswa.setUmur(4); // Akan menampilkan pesan error
siswa.setUmur(12); // Umur valid
System.out.println("Umur siswa: " + siswa.getUmur());
}
}
🖨️ Output:
Umur tidak valid! Harus antara 5 dan 18 tahun.
Umur berhasil diatur ke: 12
Umur siswa: 12
📌 Kesimpulan¶
Enkapsulasi adalah fondasi untuk membangun kode yang aman dan terorganisir:
| Konsep | Penjelasan |
|---|---|
private |
Menyembunyikan field dari akses langsung. |
| Getter/Setter | Mengontrol akses dan memungkinkan validasi data. |
| Enkapsulasi | Menggabungkan data dan logika dalam unit yang terlindungi. |
🎯 Tujuan Utama: Enkapsulasi memastikan data hanya diubah dengan cara yang terkendali, meningkatkan keamanan dan fleksibilitas kode.
📚 Langkah Selanjutnya¶
Pelajari lebih lanjut tentang Inheritance (Pewarisan) untuk memahami cara mewarisi fitur dari kelas lain.
⬅️ Kembali: Konsep Dasar OOP