Object-Oriented Programming (OOP) adalah paradigma pemrograman yang menggunakan objek dan class untuk mengatur data dan perilaku.
JavaScript modern mendukung OOP melalui class syntax ES6, memungkinkan developer menulis kode lebih modular, reusable, dan maintainable.
Contents
1. Class & Constructor
Class adalah blueprint untuk membuat objek. Constructor adalah metode khusus yang dipanggil saat objek dibuat.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const alice = new Person("Alice", 25);
console.log(alice.name); // Alice
console.log(alice.age); // 25
Tips:
- Gunakan constructor untuk menginisialisasi properti objek.
- Nama class biasanya PascalCase.
2. Method
Method adalah fungsi di dalam class yang berinteraksi dengan properti objek.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, nama saya ${this.name}`);
}
birthday() {
this.age += 1;
console.log(`Usia saya sekarang ${this.age}`);
}
}
const bob = new Person("Bob", 30);
bob.greet(); // Hello, nama saya Bob
bob.birthday(); // Usia saya sekarang 31
Insight:
- Method bisa mengakses properti melalui
this. - Method memungkinkan behavior encapsulation, menyatukan data dan aksi.
3. Inheritance
Inheritance memungkinkan class mewarisi properti dan method dari parent class, sehingga kode lebih reusable.
class Employee extends Person {
constructor(name, age, position) {
super(name, age); // panggil constructor parent
this.position = position;
}
describe() {
console.log(`${this.name} bekerja sebagai ${this.position}`);
}
}
const emp = new Employee("Charlie", 28, "Developer");
emp.greet(); // inherited method → Hello, nama saya Charlie
emp.describe(); // Charlie bekerja sebagai Developer
extends→ menandakan inheritance.super()→ memanggil constructor parent.
Tips:
- Gunakan inheritance untuk menghindari duplikasi kode.
- Jangan overuse inheritance → pertimbangkan composition jika perilaku berbeda drastis.
4. Super
super digunakan untuk:
- Memanggil constructor parent
- Memanggil method parent
class Manager extends Employee {
constructor(name, age, department) {
super(name, age, "Manager");
this.department = department;
}
greet() {
super.greet(); // memanggil greet() dari Person
console.log(`Saya mengelola departemen ${this.department}`);
}
}
const mgr = new Manager("Dana", 35, "IT");
mgr.greet();
// Hello, nama saya Dana
// Saya mengelola departemen IT
Insight:
supermenjaga kode DRY dan konsistensi perilaku parent.
5. Encapsulation (Private Field)
Encapsulation menjaga data internal class tetap aman. JavaScript modern mendukung private field dengan #.
class BankAccount {
#balance;
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
console.log(`Saldo sekarang: ${this.#balance}`);
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(1000);
account.deposit(500); // Saldo sekarang: 1500
console.log(account.getBalance()); // 1500
// console.log(account.#balance); // Error: private field
Tips:
- Gunakan private field untuk menyembunyikan data sensitif atau internal logic.
- Public method → interface aman untuk mengakses private field.
6. Static Method
Static method adalah method milik class, bukan objek, dan bisa dipanggil tanpa membuat instance.
class MathUtils {
static square(x) {
return x * x;
}
}
console.log(MathUtils.square(5)); // 25
const mu = new MathUtils();
// mu.square(5); // Error: square bukan method instance
Kegunaan:
- Utility atau helper function yang tidak membutuhkan state objek.
- Contoh: Math operations, validation, conversion.
7. Praktik Terbaik OOP di JavaScript
- Gunakan class untuk blueprint objek yang jelas.
- Gunakan inheritance untuk shared behavior, tapi hindari deep hierarchy.
- Gunakan private field (
#) untuk data sensitif atau internal. - Gunakan static method untuk utility yang tidak terkait instance.
- Pisahkan data dan logic dengan method, hindari manipulasi langsung dari luar class.
- Gunakan
super()saat inheritance untuk mengakses constructor dan method parent.
8. Contoh Kasus Nyata
8.1 Sistem Bank
class Account {
#balance;
constructor(owner, balance){
this.owner = owner;
this.#balance = balance;
}
deposit(amount){ this.#balance += amount; }
withdraw(amount){ this.#balance -= amount; }
getBalance(){ return this.#balance; }
}
class SavingsAccount extends Account {
constructor(owner, balance, interestRate){
super(owner, balance);
this.interestRate = interestRate;
}
addInterest(){
this.deposit(this.getBalance() * this.interestRate);
}
}
const myAccount = new SavingsAccount("Alice", 1000, 0.05);
myAccount.addInterest();
console.log(myAccount.getBalance()); // 1050
8.2 Utility Class
class StringUtils {
static capitalize(str){
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
console.log(StringUtils.capitalize("hello")); // Hello
9. Kesimpulan
- OOP di JavaScript memungkinkan kode modular, reusable, dan maintainable.
- Class → blueprint objek, constructor → inisialisasi properti, method → behavior.
- Inheritance & super → berbagi perilaku parent dan menjaga DRY.
- Encapsulation → melindungi data internal dengan private field (
#). - Static method → fungsi utilitas yang tidak terkait instance.
- Praktik OOP yang baik meningkatkan readability, keamanan data, dan struktur aplikasi.
💡 Insight: Menguasai OOP sangat penting di aplikasi skala besar, framework modern, dan enterprise projects karena membantu developer menulis kode yang bersih, modular, dan mudah di-maintain.