
Sebelum hadirnya Jetpack Compose, pengembang aplikasi Android harus berurusan dengan dua macam kode: kode yang mengurusi fungsi dan logika (Java/Kotlin) dan kode XML yang mengatur tampilan visual aplikasi (User Interface). ViewBinding dan DataBinding digunakan sebagai tool untuk menghubungkan kode program Java/Kotlin dengan layout XML.
Sistem UI bawaan Android (android.view.View) tersebut dirancang sejak awal rilis Android pada tahun 2008. Namun seiring berkembangnya kompleksitas aplikasi, arsitektur UI lama ini mulai menghadapi beberapa kendala besar:
- Terikat dengan OS Android: Komponen UI lama berada di dalam library OS. Perbaikan bug atau update fitur UI baru sering kali terhambat karena harus menunggu update OS perangkat.
- Hirarki Class yang Terlalu Berat: Setiap komponen UI Android lama (seperti Button atau TextView) sepintas kelihatannya simpel, namun mewarisi kelas View yang memiliki ribuan baris kode dan state internal. Mekanisme pewarisan (inheritance) ini membuat performa dan fleksibilitasnya menjadi terbatas.
- Pengolahan State yang Rentan Bug: Sinkronisasi manual antara state data di kode logika (Kotlin/Java) dan tampilan visual (XML) sering memicu bug seperti UI yang tidak diperbarui atau null pointer exception.
Dihadapkan pada permasalahan tersebut, dan setelah melihat suksesnya paradigma declarative UI pada framework modern seperti Flutter dan React, Google mulai merancang Jetpack Compose untuk memodernisasi pengembangan Android secara native.
Milestone Utama Compose:
- Mei 2019 (Google I/O): Jetpack Compose diumumkan pertama kali sebagai proyek eksperimental open-source.
- 2020 – Awal 2021: Tahap Alpha dan Beta, di mana Google menyempurnakan compiler Kotlin kustom dan sistem pengolahan recomposition.
- Juli 2021: Jetpack Compose 1.0 resmi dirilis sebagai versi stabil dan ditetapkan sebagai standar baru (recommended stack) oleh Google untuk membangun UI Android.
Mengapa Google Memprioritaskan Compose Dibanding ViewBinding / DataBinding?
Google memprioritaskan Jetpack Compose karena Compose mengubah paradigma mendasar pengembangan UI Android dari imperatif berbasis XML menjadi deklaratif berbasis Kotlin murni.
Perbedaan mendasar terletak pada peran teknologi tersebut. ViewBinding dan DataBinding tidak pernah dimaksudkan untuk menggantikan sistem UI XML, melainkan hanya menyederhanakan akses ke file XML.
Pendekatan Lama: XML (Desain) <— [ViewBinding / DataBinding] —> Kotlin (Logika)
Pendekatan Modern: Kotlin (Desain & Logika menyatu secara Deklaratif) —> Jetpack Compose
Berikut alasan utama mengapa Google memprioritaskan Jetpack Compose:
1. Deklaratif (UI = f(State)) vs Imperatif
- ViewBinding/DataBinding (Imperatif): Pada cara lama ini kamu harus mencari suatu elemen UI pada layout XML (misalnya sebuah tombol) lalu menginstruksikan langkah demi langkah cara mengubahnya atau memberinya “nyawa” (misal: binding.textView.text = “Hello”, binding.button1.isEnabled = false dsb). Cara kerja seperti ini menjadi sangat rumit dan kompleks jika sebuah aplikasi memiliki banyak kondisi data atau layout aplikasi tersebut berisi banyak elemen interaktif (bayangkanlah layout sebuah aplikasi trading atau mobile banking).
- Jetpack Compose (Deklaratif): Kamu hanya perlu mendeskripsikan bagaimana bentuk UI untuk suatu keadaan (state) data tertentu. Ketika data berubah, Compose secara otomatis memperbarui (recompose) bagian UI yang relevan tanpa manipulasi manual.
2. Satu Bahasa (Kotlin Murni)
Dengan Compose, kamu tidak perlu lagi berpindah antara file XML untuk layout dan file Kotlin untuk logika. Penggunaan Kotlin murni memungkinkan kamu menggunakan fitur bahasa seperti if, when, atau for langsung di dalam penulisan struktur UI.
3. Komposisi di atas Pewarisan (Composition over Inheritance)
Komponen UI di Compose adalah fungsi Kotlin biasa yang diberi anotasi @Composable. Kamu bisa menggabungkan komponen-komponen kecil (composable functions) menjadi UI yang kompleks dengan mudah tanpa harus berurusan dengan hierarki kelas View yang berat. Penjelasan ini mungkin terdengar abstrak, namun akan sangat terasa perbedaannya ketika kamu langsung berurusan dengan kode program tersebut.
4. “Unbundled” dari OS
Library Jetpack Compose didistribusikan melalui Android Jetpack (Maven repository), bukan tertanam di OS Android. Ini berarti setiap ada fitur baru, perbaikan bug, dan optimasi performa, semua bisa langsung dinikmati oleh perangkat Android lama cukup dengan memperbarui versi dependensi di Gradle.
5. Efisiensi Kode dan Pemeliharaan
Penggunaan Jetpack Compose terbukti mengurangi jumlah baris kode (boilerplate) hingga 40–60% dibandingkan pendekatan lama XML + ViewBinding. Kode yang lebih sedikit berarti risiko bug lebih kecil, proses code review lebih cepat, dan pengujian (unit test) UI jauh lebih sederhana.