classprivateencapsulationMahir4 mnt baca

Access Modifier

public, private, protected, dan #field: mengendalikan siapa boleh akses apa.

Tiga Modifier Dasar

typescript
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

typescript
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 #:

typescript
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.