Satu kemungkinan kenapa anda membuka artikel ini adalah: anda sedang belajar mengenai OOP (Object Oriented Programming). Atau mungkin anda yang memang sudah terbiasa dengan programming namun mulai kesulitan mengikuti struktur kode baik di kampus atau pun pekerjaan karena skalanya sudah mulai besar.
Sebelum saya sharing sedikit soal apa itu interface di bahasa pemrograman, saya ingin membuat disclaimer terlebih dahulu bahwa definisi yang ada di artikel ini berdasarkan pengalaman saya saja. Jadi, bagi anda yang sedang mencari referensi resmi, anda tidak bisa mengambil dari sini dan juga definisi yang saya berikan mungkin akan berbeda dari programmer lain. Interface di sini juga lebih merujuk ke bahasa yang berbasiskan JVM seperti Java, Kotlin dll. Untuk bentuk interface seperti di typescript rasanya artikel ini sedikit tidak on-point.
Jadi, Apa Itu Interface Sebenarnya?
Singkatnya, interface adalah referensi dari sebuah abstraksi. Aduh apaan lagi tuh, mas? Mari kita sedikit analogikan dengan starter elektrik sepeda motor. Saat anda menaiki motor, dan hendak menyalakan mesin, apa yang pertama kali anda cari? Yak, tombol starter. Tapi apakah anda tahu apa yang sebenarnya terjadi saat tombol starter ditekan? Hmmm... mungkin yang punya pemahaman soal otomotif pasti tau, tapi mostly orang awam seperti saya akan jawab tidak tahu. Itulah yang dinamakan abstraksi, yaitu gambaran lebih sederhana dari sebuah sistem yang rumit.
[ABSTRAKSI] Tombol starter adalah (abstraksi) gambaran sederhana dari sebuah rangkaian elektro starter sebenarnya
[IMPLEMENTASI] Sebuah implementasi / gambaran sebenarnya dari sistem starter motor
Jika kita memindahkan analogi ini ke sebuah bahasa pemrograman, kurang lebih akan seperti berikut:
Lah Ribet Banget Pake Di Abstraksi-in Segala
Seringkali, penggunaan abstraksi ini akan dilakukan dalam sebuah class lain yang dimana class ini tidak boleh ikut campur / melihat function-function lain yang tidak dibutuhkan. Biasanya juga class ini tidak punya reference langsung ke class YamahaMio, melainkan harus berkomunikasi via interface-nya saja.
Sebagai contoh, saat kita menekan tombol starter di sepeda motor, kita akan menjalankan function start() yang dimana function start ini adalah satu-satunya fungsi yang dilihat oleh kita si pengendara. Namun dalam penerapan aslinya, tombol starter ini akan mengecek ke modul-modul lain atau kasarnya menjalankan fungsi-fungsi lain seperti mengecek keadaan baterai motor, mengecek apakah kaki standar satu sedang aktif dan lain sebagainya.
Ingat kembali bahwa, si pengendara hanya boleh melihat satu interface (dalam hal ini tombol starter di dashboard motor) saja, pengendara tidak perlu tahu rangkaian sistem lain yang bekerja saat tombol starter ditekan.
Pokoknya, pengendara hanya boleh mengakses fungsi start() saja, dia tidak perlu tahu seberapa ribet sistem aslinya.
Perhatikan dengan baik. Pada class YamahaMioInteractor, kita tidak akan bisa mengakses method-method lain selain method start(). Karena yang kita passing ke YamahaMioInteractor adalah interface-nya dalam hal ini BikeBehavior, bukan class YamahaMio-nya. Meskipun implementasi yang diterapkan sesuai dengan yang ada di dalam class YamahaMio, tapi method yang terekspos hanyalah yang ada di interface, hal ini bagus untuk programmer karena kita tahu visibilitas mengenai method-methid mana saja yang bisa dipakai. Jika sebuah class memiliki 1000 method, namun yang terkespos keluar hanya yang diperlukan saja. Jika tidak percaya, lihat Intellij suggestion ini:
0 Comments
Type your comment. Please don't be rude and respect others.