
12 Konsep OOP yang Harus Dipahami Setiap Developer
Ketika pertama kali belajar pemrograman, Object-Oriented Programming atau OOP terdengar seperti topik yang sangat besar dan membingungkan. Class, object, inheritance, polymorphism, abstraction — semua kata ini terlihat berat di awal. Namun perlahan-lahan saya memahami satu hal sederhana: OOP bukan hanya tentang menulis class. OOP adalah cara untuk mengatur kode di sekitar hal-hal di dunia nyata. Dalam proyek nyata, Anda akan bekerja dengan entitas seperti pengguna, pesanan, pembayaran, produk, notifikasi, keranjang belanja, faktur, dan masih banyak lagi. OOP membantu Anda merepresentasikan entitas-entitas ini di dalam kode secara rapi dan terstruktur. Alih-alih menyimpan data di berbagai variabel terpisah dan menulis fungsi secara acak di mana saja, OOP memungkinkan Anda menyimpan data dan behavior yang saling terkait dalam satu tempat. Hal ini membuat kode Anda lebih mudah dipahami, diperbarui, diuji, dan dipelihara saat proyek Anda semakin besar. Namun untuk menggunakan OOP dengan benar, Anda perlu memahami konsep-konsep intinya. Berikut adalah 12 konsep OOP yang wajib dipahami oleh setiap software developer.
1. Class (Kelas)
Class adalah cetak biru atau blueprint untuk membuat objek. Class mendefinisikan atribut (data) dan metode (fungsi) yang dimiliki oleh suatu objek. Bayangkan class seperti cetakan kue — bentuknya sudah ditentukan, dan dari satu cetakan Anda bisa membuat banyak kue dengan bentuk yang sama.
public class Mobil {
String merk;
String warna;
void jalan() {
System.out.println("Mobil berjalan...");
}
}
2. Object (Objek)
Object adalah instance nyata dari sebuah class. Jika class adalah cetakan, maka object adalah hasil cetakannya. Setiap object memiliki data (atribut) dan perilaku (metode) yang independen.
Mobil mobilku = new Mobil();
mobilku.merk = "Toyota";
mobilku.warna = "Merah";
mobilku.jalan();
3. Encapsulation (Enkapsulasi)
Enkapsulasi adalah konsep menyembunyikan detail internal dari sebuah class dan hanya mengekspos apa yang diperlukan melalui metode publik. Ini melindungi data dari akses langsung yang tidak semestinya dan menjaga integritas data. Gunakan access modifier seperti private untuk membatasi akses.
public class RekeningBank {
private double saldo;
public void setor(double jumlah) {
if (jumlah > 0) {
saldo += jumlah;
}
}
public double getSaldo() {
return saldo;
}
}
4. Inheritance (Pewarisan)
Inheritance memungkinkan sebuah class mewarisi atribut dan metode dari class lain. Ini mendukung konsep parent-child di mana child class dapat menggunakan kembali kode dari parent class dan menambahkan fungsionalitasnya sendiri.
public class Kendaraan {
String merek;
void klakson() {
System.out.println("Beep! Beep!");
}
}
public class Motor extends Kendaraan {
boolean punyaBox;
}
5. Polymorphism (Polimorfisme)
Polimorfisme berarti “banyak bentuk.” Dalam OOP, polimorfisme memungkinkan satu metode memiliki banyak implementasi berbeda. Ada dua jenis: overloading (metode sama dengan parameter berbeda dalam satu class) dan overriding (metode di child class menggantikan metode di parent class).
public class Hewan {
void bersuara() {
System.out.println("Hewan bersuara...");
}
}
public class Kucing extends Hewan {
@Override
void bersuara() {
System.out.println("Meow!");
}
}
6. Abstraction (Abstraksi)
Abstraksi adalah konsep menyembunyikan kompleksitas implementasi dan hanya menampilkan fungsionalitas esensial. Ini dicapai dengan abstract class atau interface. Pengguna cukup tahu apa yang dilakukan metode, bukan bagaimana cara kerjanya.
abstract class Bentuk {
abstract double hitungLuas();
}
class Lingkaran extends Bentuk {
double radius;
@Override
double hitungLuas() {
return Math.PI * radius * radius;
}
}
7. Association (Asosiasi)
Asosiasi menggambarkan hubungan antar dua class yang independen. Setiap object memiliki siklus hidupnya sendiri. Contoh: seorang dosen mengajar mahasiswa. Dosen dan mahasiswa bisa ada tanpa satu sama lain, tetapi mereka memiliki hubungan.
public class Dosen {
private String nama;
}
public class Mahasiswa {
private String nama;
private Dosen dosenWali;
}
8. Aggregation (Agregasi)
Agregasi adalah bentuk asosiasi khusus yang menggambarkan hubungan “memiliki” (has-a) yang lemah. Child class bisa eksis tanpa parent class. Contoh: sebuah universitas memiliki banyak mahasiswa, tetapi mahasiswa masih bisa ada meskipun universitas tersebut tutup.
public class Universitas {
private List<Mahasiswa> mahasiswa;
}
9. Composition (Komposisi)
Komposisi adalah bentuk asosiasi yang lebih kuat dari agregasi. Dalam komposisi, child class tidak bisa eksis tanpa parent class. Jika parent dihancurkan, child ikut hancur. Contoh: sebuah rumah memiliki ruangan. Jika rumah dihancurkan, ruangan juga ikut hilang.
public class Rumah {
private List<Ruangan> ruangan;
public Rumah() {
ruangan = new ArrayList<>();
ruangan.add(new Ruangan("Kamar Tidur"));
}
}
10. Dependency Injection (Injeksi Dependensi)
Dependency Injection adalah teknik di mana sebuah class menerima dependensinya dari luar, bukan menciptakannya sendiri. Ini membuat kode lebih modular, mudah diuji, dan mudah dipelihara. Pola ini sering digunakan dalam framework seperti Spring.
public class Service {
private Repository repo;
// Dependency Injection melalui constructor
public Service(Repository repo) {
this.repo = repo;
}
}
11. Interface (Antarmuka)
Interface adalah kontrak yang mendefinisikan metode apa yang harus dimiliki oleh sebuah class tanpa menentukan implementasinya. Class yang mengimplementasikan interface wajib menyediakan implementasi untuk semua metode yang didefinisikan. Ini memungkinkan multiple inheritance dalam Java.
interface BisaTerbang {
void terbang();
}
class Burung implements BisaTerbang {
public void terbang() {
System.out.println("Burung terbang...");
}
}
12. Method Overloading & Overriding
- Overloading: Metode dengan nama sama dalam satu class tetapi parameter berbeda. Diputuskan saat compile time.
- Overriding: Metode di child class menggantikan implementasi metode di parent class dengan nama dan parameter yang sama persis. Diputuskan saat runtime.
// Overloading
class Kalkulator {
int tambah(int a, int b) { return a + b; }
int tambah(int a, int b, int c) { return a + b + c; }
}
// Overriding
class Induk {
void sapa() { System.out.println("Halo dari Induk"); }
}
class Anak extends Induk {
@Override
void sapa() { System.out.println("Halo dari Anak"); }
}

Kesimpulan
Memahami 12 konsep OOP di atas adalah langkah penting untuk menjadi software developer yang handal. Setiap konsep memiliki perannya masing-masing dalam membangun aplikasi yang terstruktur, mudah dipelihara, dan scalable. Mulailah dari konsep paling dasar seperti class dan object, lalu lanjutkan ke konsep yang lebih kompleks seperti polimorfisme, komposisi, dan dependency injection. Praktik secara konsisten dengan membangun proyek-proyek kecil akan membantu Anda menguasai OOP secara alami. OOP bukanlah sekadar teori — ini adalah alat yang sangat praktis yang akan Anda gunakan setiap hari dalam karir sebagai pengembang perangkat lunak.



