Episode ini menelusuri evolusi UI Android dari XML ke Compose, keunggulan pendekatan deklaratif yang Kotlin-native dan reaktif, perbandingan dengan framework cross-platform, serta use cases modern yang paling diuntungkan oleh Compose.

Sebelum menulis baris kode Compose, penting memahami mengapa Compose ada. Episode 0 sudah menyiapkan environment kalian; sekarang kita mundur sejenak ke sejarah UI Android untuk melihat masalah yang coba dipecahkan Compose.
Pendekatan lama Android — layout XML ditambah logika imperatif di Activity — bertahan lebih dari satu dekade dan sukses di banyak aplikasi. Tapi kompleksitasnya tumbuh tidak terkendali: adapter, view holder, dan sinkronisasi state manual membuat bug mudah merayap masuk. Compose hadir sebagai jawaban.
Episode 1 ini membedah perjalanan evolusi tersebut, keunggulan Compose, perbandingan dengan pendekatan lain, dan di mana Compose paling unggul dipakai.
Android lahir dengan model UI imperatif. Kalian mendeklarasikan layout di file XML, lalu menghubungkan elemennya dengan findViewById di Activity. Setiap perubahan data harus diikuti pembaruan manual pada view — misalnya memanggil notifyDataSetChanged pada RecyclerView adapter.
Model ini bekerja, tapi boilerplate-nya besar. Semakin banyak state di layar, semakin banyak kode sinkronisasi yang harus dijaga. Kalau kalian lupa memperbarui satu view, UI dan data tidak lagi sinkron.
Jetpack Compose diumumkan Google pada tahun 2019 dan mencapai versi stable 1.0 pada Juli 2021. Compose mengganti pendekatan imperatif dengan deklaratif: kalian mendeskripsikan UI sebagai fungsi dari state, dan framework yang mengurus pembaruannya.
@Composable
fun KartuSalam(nama: String) {
Card(Modifier.fillMaxWidth()) {
Column(Modifier.padding(16.dp)) {
Text("Halo, $nama!")
Text("Selamat datang di Compose")
}
}
}Card(Modifier.fillMaxWidth()) dan Column(Modifier.padding(16.dp)) menunjukkan gaya Compose: setiap elemen adalah fungsi Kotlin yang menerima modifier. Tidak ada lagi file XML terpisah atau findViewById — struktur, data, dan perilaku berada di satu tempat.
Compose dirilis dengan kebijakan kompatibilitas yang ketat. Sejak versi 1.0, Google berkomitmen menjaga API tetap stabil — perubahan besar selalu diumumkan lebih dulu dan melewati masa deprecation sebelum dihapus. Bagi kalian yang memulai project baru, ini berarti kode Compose yang ditulis sekarang tetap bisa dipelihara bertahun-tahun ke depan.
Meski begitu, versi library tetap perlu dijaga. Dependency Compose dikelola lewat version catalog di gradle/libs.versions.toml, dan kalian bisa memeriksa dependency yang sudah ketinggalan zaman lewat perintah Gradle. Konsistensi versi ini penting karena Compose, compiler, dan library pendukungnya saling bergantung satu sama lain.
Seluruh API Compose adalah fungsi Kotlin. Kalian memakai bahasa yang sama untuk UI dan logika bisnis, dengan type safety penuh saat kompilasi. Tidak ada R.id lookup, tidak ada adapter untuk list sederhana, dan preview bisa di-render langsung di IDE.
Inilah yang membuat onboarding developer baru jauh lebih singkat dibandingkan era XML: tidak ada lagi boilerplate adapter dan tidak ada lagi sinkronisasi manual antara XML dan kode.
Compose membaca state dan memperbarui hanya bagian UI yang berubah. Proses ini disebut recomposition: Compose membandingkan komposisi sebelumnya lalu menjalankan ulang hanya composable yang inputnya berubah. Kalian tidak lagi memanggil fungsi update manual — cukup ubah state, UI mengikuti.
Pola pikir ini juga mempermudah testing: karena UI hanyalah fungsi dari state, perilaku layar bisa diverifikasi tanpa menggerakkan emulator. Strategi pengujian ini akan dibahas lengkap di episode 14, tapi sejak sekarang ingat bahwa desain deklaratif dan state-driven lahir untuk membuat aplikasi lebih mudah diverifikasi.
XML masih dipakai untuk aplikasi legacy, dan Compose menyediakan jalur migrasi bertahap lewat interop (dibahas di episode 16). Untuk project baru, Compose unggul dalam produktivitas karena boilerplate lebih sedikit dan UI lebih mudah diuji.
Flutter memakai Dart dan mengontrol seluruh rendering sendiri, sedangkan React Native memakai JavaScript dengan bridge ke view native. Compose berbeda: dia berjalan langsung di Android framework dengan komponen Material asli, dan terintegrasi dalam dengan system seperti perangkat lunak aksesibilitas dan lifecycle.
Kelebihan Compose di sini adalah fidelity native: tidak ada lapisan rendering tersendiri, sehingga konsistensi visual dengan platform dan fitur Android lainnya lebih tinggi.
Keunggulan lain adalah ekosistem yang menyatu: Compose menikmati update langsung dari Google bersama library Android lainnya, sehingga fitur baru seperti dynamic color dan adaptive layouts sampai ke kalian tanpa memerlukan library pihak ketiga. Bagi tim yang sudah berinvestasi di Kotlin, ini mengurangi biaya belajar sekaligus biaya pemeliharaan.
Keputusan memakai Compose bukan keputusan binary: kalian bisa mulai dari satu screen dan memperluasnya pelan-pelan. Karena Compose hidup di atas Android framework yang sama, jalur adopsi bertahap ini tidak memaksa menulis ulang seluruh aplikasi sekaligus.
Compose paling unggul dalam skenario berikut:
Untuk aplikasi yang sudah berjalan lama dengan UI XML, Compose tetap bisa diadopsi bertahap — pola hybrid ini akan dibahas di episode 16. Kuncinya adalah tidak perlu pindah sekaligus.
Jika kalian memulai project baru, pastikan build pertama sukses sejak awal:
./gradlew :app:assembleDebugJalankan ./gradlew :app:assembleDebug untuk memastikan seluruh dependency dan plugin terunduh dengan benar. Jika build sukses, fondasi kalian siap untuk menulis composable pertama di episode 3.
Episode 1 menjelaskan konteks sejarah Compose: dari era XML yang imperatif dan penuh boilerplate, lahir pendekatan deklaratif yang Kotlin-native dan reaktif. Kalian juga melihat perbandingan dengan Flutter dan React Native, serta skenario di mana Compose paling diuntungkan.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya kita akan membahas konsep dasar dan arsitektur Compose — composable functions, recomposition, composition tree dan slots, pipeline rendering, serta cara Compose berdampingan dengan Android views. Ini adalah fondasi konseptual yang akan kalian pakai di semua episode berikutnya.