Access Modifier
public, private, protected, dan #field: mengendalikan siapa boleh akses apa.
Tiga Modifier Dasar
class AkunBank {
public pemilik: string; // bisa diakses dari mana saja (default)
private saldo: number = 0; // hanya di dalam class ini
protected idCabang: string; // class ini + subclass
constructor(pemilik: string, idCabang: string) {
this.pemilik = pemilik;
this.idCabang = idCabang;
}
setor(jumlah: number): void {
if (jumlah > 0) this.saldo += jumlah;
}
}
const akun = new AkunBank("Ana", "BDG-01");
akun.saldo = 1000000;
// Error: Property 'saldo' is private and only accessible within class 'AkunBank'.private mencegah saldo diubah langsung tanpa validasi. Semua perubahan harus lewat method setor yang punya aturan. Inilah enkapsulasi.
protected untuk Pewarisan
class AkunPremium extends AkunBank {
infoCabang(): string {
return `Cabang: ${this.idCabang}`; // ok, protected bisa diakses subclass
}
}protected adalah jalan tengah: disembunyikan dari dunia luar, tapi tetap bisa dipakai class turunan. Cocok untuk helper internal yang memang dirancang untuk diwariskan.
private TS vs #field JavaScript
JavaScript modern punya private field bawaan dengan #:
class Counter {
#nilai = 0; // private di runtime, benar-benar tidak bisa diakses luar
private label = "x"; // private hanya di level tipe, hilang saat kompilasi
}Perbedaan krusial: private TypeScript hanya dicek compiler. Di JavaScript hasil kompilasi, field-nya tetap properti biasa yang bisa diakses (atau dimodifikasi) lewat trik. #nilai ditegakkan oleh engine JavaScript sendiri, bahkan lewat obj["#nilai"] pun tidak bisa.
Kapan pakai mana? private cukup untuk kebanyakan kode aplikasi dan lebih fleksibel (bisa diakses di test via casting bila perlu). # untuk library atau kode di mana proteksi runtime benar-benar penting.
Catatan teknis: Jangan campur gaya tanpa alasan dalam satu class. Pilih satu konvensi per codebase. Dan ingat: modifier akses bukan keamanan. Keduanya tidak melindungi dari kode berbahaya yang sengaja mengakali, mereka melindungi dari kesalahan pemakaian yang tidak disengaja.