Apa Itu Enkapsulasi?
Dalam pemrograman berorientasi objek, enkapsulasi (encapsulation) adalah menyatukan data sebuah objek dan method yang mengolah data itu dalam satu unit, biasanya sebuah class, serta menyembunyikan detail di dalamnya sehingga kode lain hanya bisa memakai objek itu lewat method publiknya.
Diperbarui 24 September 2026
Misalkan sebuah aplikasi perbankan menyimpan saldo setiap rekening di variabel biasa. Baris mana pun di program itu bisa menulis account.balance = -500, dan tidak ada yang mencegahnya. Saat saldo negatif muncul di production, kamu harus mencari di seluruh codebase setiap tempat yang pernah menyentuhnya. Enkapsulasi memperbaiki ini: saldo hanya bisa berubah lewat beberapa method, dan method-method itu menegakkan aturannya, misalnya bahwa penarikan tidak boleh melebihi saldo.
Cara kerja enkapsulasi
Enkapsulasi menggabungkan dua ide:
- Penyatuan. Data (saldo) dan kode yang mengolahnya (deposit, withdraw) berada di class yang sama.
- Penyembunyian. Kode lain hanya melihat interface publik class itu. Data di baliknya bersifat internal, jadi hanya bisa berubah dengan cara yang diizinkan class tersebut.
Aturan yang dilindungi class disebut invariant: di sini, "saldo tidak pernah negatif". Karena setiap perubahan melewati method-method class itu, invariant-nya tetap terjaga apa pun yang dilakukan bagian program lainnya.
70
refused: not enough money
Kode di luar bisa membaca acct.balance, tetapi property itu tidak punya setter, jadi acct.balance = 1000 memunculkan AttributeError. Kalau saldonya suatu saat salah, hanya ada dua method yang perlu diperiksa.
Enkapsulasi di Python
Python tidak punya kata kunci private. Python mengandalkan konvensi penamaan yang diketahui setiap programmer Python:
name: publik, bagian dari interface._name: internal. Tidak ada yang mencegahmu membacanya, tetapi garis bawah di depannya berarti "jangan bergantung pada ini".__name: Python mengganti namanya di dalam class (name mangling), supaya subclass tidak menimpanya secara tidak sengaja.@property: mengubah sebuah method menjadi sesuatu yang terbaca seperti atribut, sehingga kamu bisa menambahkan pemeriksaan belakangan tanpa mengubah kode pemanggil mana pun.
0
False
42
Name mangling mencegah ketidaksengajaan, bukan akses: nama yang sudah diubah itu tetap bisa dipakai. Python memercayai programmer untuk menghormati garis bawah itu. Dalam praktiknya, sebagian besar kode Python memakai satu garis bawah ditambah @property, dan menyimpan dua garis bawah untuk class yang memang dimaksudkan untuk dijadikan subclass. Penjelasan lebih lanjut tentang menulis class ada di dokumentasi class Python.
Enkapsulasi di Java, C++, dan JavaScript
Bahasa lain memaksakan penyembunyiannya. Di Java, field private hanya bisa dipakai di dalam class-nya sendiri:
public class BankAccount {
private int balance; // hidden from every other class
public int getBalance() { return balance; }
public void withdraw(int amount) {
if (amount > balance) throw new IllegalArgumentException("not enough money");
balance -= amount;
}
}
Menulis account.balance = 1000; di class lain tidak bisa di-compile: javac melaporkan balance has private access in BankAccount.
| Bahasa | Anggota tersembunyi | Anggota publik | Ditegakkan oleh |
|---|---|---|---|
| Python | _name, __name | name | Konvensi |
| Java | private int name | public int name | Compiler |
| C++ | Bagian private: | Bagian public: | Compiler |
| JavaScript | #name | name | Engine JavaScript |
C++ membuat anggota class bersifat private secara default dan anggota struct bersifat public. Field private # di JavaScript, yang ditambahkan di ES2022, sama sekali tidak bisa dibaca dari luar class. Dokumentasi membahas masing-masing: access modifier Java, access specifier C++, dan private field JavaScript.
Kenapa enkapsulasi penting
- Aturan berada di satu tempat. Pemeriksaan "tidak ada penarikan di atas saldo" ditulis sekali saja, di dalam
withdraw, bukan sebelum setiap penarikan di seluruh program. - Bagian dalamnya bisa kamu ubah dengan bebas. Kalau kamu memutuskan untuk menyimpan uang sebagai sen utuh, bukan float, hanya class itu yang berubah. Kode yang memanggil
deposit(100)tetap berjalan. - Debugging lebih mudah. Saat sebuah nilai salah, tersangkanya adalah beberapa method yang boleh mengubahnya, bukan setiap baris di program.
- Lebih sedikit yang harus dipelajari dan diuji. Class dengan tiga method publik bisa dipahami dan diuji lewat ketiga method itu.
Enkapsulasi juga berlaku di atas tingkat class. Modul yang menampilkan dua fungsi dan menyimpan sepuluh fungsi pembantu secara internal juga terenkapsulasi dengan cara yang sama, begitu juga sistem operasi yang membiarkan program membuka file hanya lewat system call.
Enkapsulasi sering tertukar dengan abstraksi. Abstraksi menentukan apa yang ditawarkan interface; enkapsulasi melindungi data di baliknya. Halaman abstraksi punya perbandingan lengkapnya secara berdampingan. Bersama polimorfisme dan inheritance, keduanya adalah empat pilar pemrograman berorientasi objek.
Kesalahan yang umum
- Getter dan setter untuk setiap field.
setBalanceyang menerima angka apa pun tidak melindungi apa-apa. Tawarkan operasi yang dibutuhkan objeknya (withdraw), bukan akses mentah ke setiap field. - Mengembalikan objek internal. Method yang mengembalikan
self._itemsmenyerahkan list aslinya kepada pemanggil, yang sekarang bisa mengubahnya. Kembalikan salinan atau tuple saja. - Menganggap private sebagai keamanan. Access modifier mencegah kesalahan, bukan serangan. Kode Java bisa membaca field private lewat reflection, dan kode Python bisa membaca
_namesecara langsung. Password dan key butuh perlindungan sungguhan, seperti hashing dan enkripsi.
Lanjut ke mana
Baca abstraksi berikutnya, yang membahas perbedaan kedua ide ini, lalu polimorfisme. Kursus Python membangun class langkah demi langkah, dan kursus Java menunjukkan enkapsulasi yang ditegakkan oleh compiler.
Pertanyaan yang sering diajukan
Apa itu enkapsulasi dalam istilah sederhana?
deposit dan withdraw, yang memeriksa aturannya lebih dulu. Namanya berasal dari kapsul, cangkang yang menjaga isinya tetap di dalam.Apa saja contoh enkapsulasi?
deposit dan withdraw adalah contoh klasiknya. list milik Python sendiri adalah contoh lain: kamu memanggil append dan tidak pernah mengurus memori yang menyimpan item-itemnya. Modul yang hanya menampilkan beberapa fungsi dan menjaga fungsi-fungsi pembantunya tetap privat adalah enkapsulasi dalam skala yang lebih besar.Apa saja tiga jenis enkapsulasi?
Tutorial yang mendaftar tiga jenis biasanya maksudnya enkapsulasi variabel anggota (field private), enkapsulasi fungsi (method pembantu yang private), dan enkapsulasi class (class yang disembunyikan di dalam class atau modul lain). Ini bukan kategori formal; ketiganya adalah ide yang sama yang diterapkan pada field, method, dan class secara utuh.
Apa itu enkapsulasi di C++ dan bagaimana cara memakainya?
private dan menyediakan fungsi anggota public yang membaca atau mengubahnya. Anggota sebuah class bersifat private secara default, sedangkan anggota sebuah struct bersifat public secara default. Compiler menolak kode apa pun di luar class yang mencoba memakai anggota private.Apa arti enkapsulasi dalam jaringan?
Dalam jaringan, enkapsulasi berarti membungkus data dengan header dari setiap lapisan protokol saat data itu keluar: pesan HTTP masuk ke dalam segmen TCP, yang masuk ke dalam paket IP, yang masuk ke dalam frame Ethernet. Namanya sama dengan ide dalam pemrograman, tetapi konsepnya berbeda.