Lewati ke konten

Access Modifier

Setelah membaca halaman ini, kamu diharapkan dapat:

  • Menjelaskan perbedaan antara public, private, & protected.
  • Menentukan modifier yang tepat untuk menjaga keamanan data objek.
  • Membaca dan memperbaiki error kompilasi akibat pelanggaran modifier.

Secara default, seluruh properti dan method di dalam class bisa diakses bebas dari mana saja (luar class). Tetapi dalam pembuatan aplikasi nyata, membiarkan data penting diubah secara bebas sangat berbahaya. Kita membutuhkan Access Modifier untuk mengatur tingkat hak akses data tersebut.


TypeScript menyediakan tiga kata kunci untuk mengatur hak akses:

Modifier Akses dari dalam Class sendiri? Akses dari Class anak (warisan)? Akses dari luar Class?
public Ya ✓ Ya ✓ Ya ✓ (Bebas)
protected Ya ✓ Ya ✓ Tidak ✗ (Dilarang)
private Ya ✓ Tidak ✗ Tidak ✗ (Dilarang)

Analogi Kehidupan Sehari-hari: Tingkat Akses Sekolah

Section titled “Analogi Kehidupan Sehari-hari: Tingkat Akses Sekolah”

Bayangkan gerbang dan area di sekolah:

Halaman depan sekolah di dekat jalan raya terbuka untuk umum. Wali murid, penjual makanan, dan orang lewat boleh masuk ke halaman ini.

🖥️ Output
Public = Halaman luar sekolah (siapa saja boleh masuk)

Ruang guru hanya boleh dimasuki oleh Guru (kelas induk) dan Magang (kelas anak yang mewarisi sifat guru). Orang luar atau siswa biasa dilarang masuk.

🖥️ Output
Protected = Ruang Guru (hanya untuk guru dan asisten magang)

3. Private (Laci Brankas Meja Kepala Sekolah)

Section titled “3. Private (Laci Brankas Meja Kepala Sekolah)”

Laci meja kepala sekolah dikunci rapat. Hanya Kepala Sekolah sendiri yang memegang kuncinya. Guru lain pun dilarang membukanya.

🖥️ Output
Private = Laci Meja Kepala Sekolah (hanya untuk pemilik meja)

Mari kita buat program class AkunSiswa yang mendemonstrasikan batasan dari ketiga access modifier tersebut.

Buat file bernama src/bab8/access-modifier.ts:

📄 TypeScript
class AkunSiswa {
public nama: string; // Bisa diakses dari mana saja
protected nomorAbsen: number; // Hanya untuk class ini dan keturunannya
private password: string; // Benar-benar rahasia (hanya di class ini)
constructor(nama: string, absen: number, sandi: string) {
this.nama = nama;
this.nomorAbsen = absen;
this.password = sandi;
}
// Method public untuk login (bisa diakses luar)
public cobaLogin(sandiInput: string): void {
if (sandiInput === this.password) {
console.log(`✓ Login sukses! Selamat datang, ${this.nama}.`);
} else {
console.log("⚠ Login Gagal: Password salah!");
}
}
}
const siswaA = new AkunSiswa("Putra Ramadhan", 15, "rpl123");
// 1. Mengakses public (Boleh)
console.log(`Nama Siswa: ${siswaA.nama}`);
// 2. Mengakses method public (Boleh)
siswaA.cobaLogin("rpl123");
// 3. Mengakses private atau protected (Error!)
// console.log(siswaA.password); // ✗ Error! Property 'password' is private
// console.log(siswaA.nomorAbsen); // ✗ Error! Property 'nomorAbsen' is protected

Jalankan dengan perintah:

🖥️ Output
tsx src/bab8/access-modifier.ts
🖥️ Output
Nama Siswa: Putra Ramadhan
✓ Login sukses! Selamat datang, Putra Ramadhan.

  • public nama — properti nama diakses langsung di luar class (siswaA.nama) tanpa masalah.
  • private password — properti ini dikunci rapat. Tidak ada kode di luar class AkunSiswa yang bisa membaca atau mengubahnya secara langsung. Satu-satunya cara mengecek password adalah dengan memanggil method public cobaLogin().
  • protected nomorAbsen — properti ini dilarang diakses langsung dari luar. Tetapi jika kita membuat class baru yang mewarisi AkunSiswa, class anak tersebut masih boleh memakainya (akan dibahas di halaman Inheritance).

Parameter Properties dengan Access Modifier

Section titled “Parameter Properties dengan Access Modifier”

Di halaman Constructor, kita belajar cara menyingkat kode menggunakan Parameter Properties. Kita bisa meletakkan public, private, atau protected langsung di dalam parameter constructor:

📄 TypeScript
class Siswa {
// TypeScript otomatis membuat property dan memasukkan nilainya
constructor(
public nama: string,
private nis: number
) {}
}

❌ Mencoba memodifikasi properti private secara langsung dari luar class

Section titled “❌ Mencoba memodifikasi properti private secara langsung dari luar class”
📄 TypeScript
siswaA.password = "rahasianew"; // Error di TypeScript!

Perbaikan: Buatlah method khusus (seperti gantiPassword()) di dalam class yang melakukan validasi terlebih dahulu sebelum mengubah properti private tersebut.



  1. Buat class SiswaUjian menggunakan Parameter Properties singkat dengan properti: public nama: string dan private nilai: number.
  2. Tambahkan method public cetakStatus() yang mencetak "Lulus" jika nilai >= 75 dan "Remedial" jika kurang.
  3. Buat objeknya dan uji coba apakah properti nilai aman dari akses langsung luar.

  • public — bebas diakses dari mana saja (default).
  • protected — hanya bisa diakses dari class itu sendiri dan class keturunannya.
  • private — hanya bisa diakses dari dalam class itu sendiri.
  • Access Modifier adalah alat utama untuk menerapkan pilar Enkapsulasi di OOP.