โ Kembali ke Konsep OOP
๐
Pilar
Encapsulation (Enkapsulasi)
Menyatukan data dan method yang mengolah data tersebut dalam satu unit, serta membatasi akses langsung ke state internal objek.
Masalahnya
Tanpa encapsulation, kode dari luar bisa langsung membaca dan mengubah field sebuah objek. Akibatnya muncul state yang tidak valid, invariant yang rusak, dan keterikatan erat antara pemanggil dengan detail implementasi internal.
Cara Kerja
- โบField dibuat private; akses dilakukan melalui method public atau computed property
- โบRepresentasi internal bisa berubah tanpa merusak kode di luar
- โบLogika validasi dan pengecekan invariant berada di satu tempat; setter yang menegakkan aturannya
- โบMengurangi keterikatan: pemanggil bergantung pada perilaku, bukan struktur internal
Kapan Digunakan
โMenjaga invariant (misalnya saldo tidak boleh negatif)
โMenyembunyikan detail implementasi yang mungkin berubah nanti
โMenyediakan API yang terkontrol dan seminimal mungkin untuk sebuah class
Contoh di Dunia Nyata
๐
iOS
Property private(set) dan computed property dengan setter custom
๐ค
Android
Field private di Kotlin yang diakses lewat getter/setter custom atau validasi di data class
๐
Web
Private class field JavaScript (#balance) yang hanya bisa diakses lewat method
Contoh Kode
Swift
class BankAccount {
private var balance: Double = 0
init(initialBalance: Double) {
balance = initialBalance
}
func deposit(_ amount: Double) {
guard amount > 0 else { return }
balance += amount
}
func withdraw(_ amount: Double) -> Bool {
guard amount > 0, amount <= balance else { return false }
balance -= amount
return true
}
var currentBalance: Double { balance }
}
let account = BankAccount(initialBalance: 100)
account.deposit(50)
print(account.currentBalance) // 150