Dalam pengembangan aplikasi berorientasi objek, pengelolaan akses terhadap properti class merupakan hal penting untuk menjaga keamanan dan integritas data. TypeScript menawarkan solusi elegan melalui fitur Getter dan Setter di TypeScript yang memungkinkan pengembang mengontrol cara data dibaca dan diubah tanpa langsung mengakses properti secara publik.
Fitur getter dan setter tidak hanya membuat kode lebih aman, tetapi juga membantu menjaga encapsulation — prinsip utama dalam OOP (Object-Oriented Programming). Dengan menggunakan getter, kita dapat menampilkan data secara terkontrol, sementara setter memastikan hanya data valid yang bisa disimpan dalam properti class. Dengan cara ini, TypeScript membantu menjaga konsistensi logika bisnis dalam sebuah aplikasi.
Apa Itu Getter dan Setter dalam TypeScript?
Getter adalah method khusus yang digunakan untuk membaca atau mengambil nilai dari properti tertentu dalam class.
Setter adalah method untuk mengatur atau mengubah nilai properti tersebut.
Keduanya menggunakan sintaks get dan set, dan biasanya digunakan bersama dengan properti yang bersifat private agar tidak bisa diakses langsung dari luar class.
Contoh dasar penggunaan getter dan setter:
class User {
private _name: string = "";
get name(): string {
return this._name;
}
set name(value: string) {
if (value.length < 3) {
throw new Error("Nama harus minimal 3 karakter");
}
this._name = value;
}
}
const user = new User();
user.name = "Andi"; // setter dipanggil
console.log(user.name); // getter dipanggil, Output: Andi
Dalam contoh di atas, properti _name tidak dapat diakses langsung dari luar class. Pengguna harus menggunakan setter untuk mengubah nilainya dan getter untuk membacanya. Dengan demikian, validasi dapat diterapkan dengan mudah.
Mengapa Perlu Menggunakan Getter dan Setter?
Getter dan setter membantu menjaga enkapsulasi data, yang artinya data internal suatu objek tidak dapat diakses atau dimodifikasi secara sembarangan. Beberapa manfaat utama penggunaan Getter Setter TypeScript antara lain:
-
Keamanan data: Hanya data valid yang dapat disimpan melalui setter.
-
Konsistensi logika: Semua perubahan data melewati satu titik kendali.
-
Pemeliharaan mudah: Jika logika berubah, cukup ubah di dalam getter atau setter tanpa mengubah bagian lain kode.
-
Interoperabilitas: Memudahkan integrasi dengan sistem eksternal tanpa membocorkan detail internal class.
Mengontrol Akses Properti dengan Getter dan Setter
Getter dan setter memungkinkan kita membuat properti “terbaca tapi tidak dapat diubah langsung” (read-only), atau sebaliknya. Kita dapat menyesuaikan akses sesuai kebutuhan.
Contoh kontrol akses:
class Product {
private _price: number = 0;
get price(): number {
return this._price;
}
set price(value: number) {
if (value < 0) {
throw new Error("Harga tidak boleh negatif");
}
this._price = value;
}
}
const item = new Product();
item.price = 50000; // setter
console.log(item.price); // getter, Output: 50000
Di sini, setter memastikan harga produk tidak pernah bernilai negatif. Jika pengguna mencoba menetapkan nilai yang salah, sistem langsung memberikan error.
Contoh Getter dan Setter pada Class Kompleks
Getter dan setter juga dapat digunakan dalam class yang lebih kompleks, seperti saat mengelola data user lengkap atau perhitungan otomatis.
Contoh real use case:
class Employee {
private _firstName: string;
private _lastName: string;
private _salary: number;
constructor(firstName: string, lastName: string, salary: number) {
this._firstName = firstName;
this._lastName = lastName;
this._salary = salary;
}
get fullName(): string {
return `${this._firstName} ${this._lastName}`;
}
get salary(): number {
return this._salary;
}
set salary(value: number) {
if (value < 5000000) {
throw new Error("Gaji tidak boleh di bawah 5 juta");
}
this._salary = value;
}
}
const emp = new Employee("Budi", "Santoso", 6000000);
console.log(emp.fullName); // Output: Budi Santoso
emp.salary = 7000000; // setter
console.log(emp.salary); // getter, Output: 7000000
Pada contoh di atas, properti fullName hanya menggunakan getter karena bersifat read-only, sementara salary memiliki setter untuk validasi nilai minimum.
Getter dan Setter di TypeScript vs JavaScript
Meskipun JavaScript juga mendukung getter dan setter, TypeScript memberikan keunggulan dengan pemeriksaan tipe statis (static type checking). Artinya, TypeScript dapat memastikan bahwa getter mengembalikan tipe data yang benar, dan setter menerima tipe data yang sesuai.
Contoh kesalahan yang terdeteksi oleh TypeScript:
class Student {
private _age: number = 0;
set age(value: number) {
if (value < 5 || value > 100) {
throw new Error("Usia tidak valid");
}
this._age = value;
}
}
const s = new Student();
s.age = "dua puluh"; // ❌ Error: Type 'string' is not assignable to type 'number'
TypeScript akan langsung memberi peringatan bahwa tipe data yang diberikan tidak sesuai dengan definisi.
Kesimpulan
Fitur Getter Setter TypeScript memberikan kendali penuh atas bagaimana data dalam class diakses dan dimodifikasi. Dengan memanfaatkan getter untuk membaca data dan setter untuk validasi input, pengembang dapat menjaga keamanan, konsistensi, dan integritas logika aplikasi.
Jika kamu ingin mengembangkan sistem berbasis OOP yang kuat di TypeScript, pemahaman mendalam tentang getter dan setter adalah langkah penting sebelum melangkah ke konsep lanjutan seperti property decorator dan data encapsulation pattern.