โ† Kembali ke Konsep OOP
๐ŸŽญ
Pilar

Abstraction (Abstraksi)

Menyembunyikan detail implementasi yang rumit di balik interface yang sederhana dan jelas, hanya menampilkan yang dibutuhkan pemanggil.

Masalahnya

Tanpa abstraksi, pemanggil harus memahami dan bergantung pada setiap detail implementasi sebuah sistem. Kode jadi lebih sulit dipakai, diubah, dan dites, serta implementasinya tidak mungkin ditukar.

Cara Kerja

  • โ€บAbstract class/protocol/interface menjelaskan *apa* yang dilakukan objek, bukan *bagaimana*
  • โ€บImplementasi konkret mengisi bagian "bagaimana" di balik abstraksi
  • โ€บPemanggil memprogram terhadap abstraksi, sehingga implementasinya bisa ditukar
  • โ€บMengurangi beban pikiran dengan hanya menampilkan operasi yang relevan

Kapan Digunakan

โœ“Merancang API publik atau library
โœ“Mendukung beberapa implementasi di balik satu interface (misalnya penyedia pembayaran)
โœ“Mengisolasi subsistem yang sering berubah di balik batas yang stabil

Contoh di Dunia Nyata

๐ŸŽ
iOS

Protocol seperti Codable dan Equatable menyembunyikan detail conformance dari pemanggil

๐Ÿค–
Android

Interface Repository menyembunyikan apakah data berasal dari Room atau panggilan jaringan

๐ŸŒ
Web

Interface Storage yang mengabstraksi localStorage, sessionStorage, atau IndexedDB

Contoh Kode

Swift
protocol PaymentProcessor {
    func pay(amount: Double)
}

class CreditCardProcessor: PaymentProcessor {
    func pay(amount: Double) {
        print("Charging $\(amount) to credit card")
    }
}

class PayPalProcessor: PaymentProcessor {
    func pay(amount: Double) {
        print("Sending $\(amount) via PayPal")
    }
}

func checkout(amount: Double, processor: PaymentProcessor) {
    processor.pay(amount: amount)
}

checkout(amount: 49.99, processor: PayPalProcessor())