Blog Yazısı

← Tüm Blog Yazılarına Dön
Mobil Geliştirme & Android • 11 Kasım 2026 • 6 dk okuma

Android Geliştiriciliğinde Yeni Dönem: Jetpack Compose Nedir ve Klasik XML'in Yerini Nasıl Aldı?

Android dünyasında XML tabanlı arayüz tasarımı yerini Kotlin ile doğrudan yazılan bildirimsel (declarative) Jetpack Compose'a bıraktı. Compose'un çalışma mantığı, State yönetimi, Recomposition ve sunduğu hız avantajları.

Yıllar boyunca Android uygulama geliştiren herkes için arayüz tasarlamak iki ayrı dünyanın birleştirilmesi anlamına geliyordu: Bir yanda XML dosyalarında statik olarak tanımlanan butonlar, LinearLayout'lar ve TextView'ler; diğer yanda Java veya Kotlin tarafında bu bileşenleri tek tek findViewById veya ViewBinding ile yakalayıp dinamik olarak güncelleyen kodlar. Bu iki katman arasındaki senkronizasyonu sağlamak zamanla büyük projelerde kod kalabalığına, State (durum) tutarsızlıklarına ve karmaşık yaşam döngüsü (Lifecycle) hatalarına yol açıyordu. Google'ın modern Android geliştiriciliği için sunduğu Jetpack Compose, bu 15 yıllık XML paradigmasını tamamen yıkarak Android'i bildirimsel (declarative) bir çağa taşıdı.

Emirsel (Imperative) vs Bildirimsel (Declarative) UI:
Klasik XML yaklaşımı 'Emirsel' (Imperative) idi: 'Butonu bul, üzerine tıklandığında metnini Kaydedildi yap, arka plan rengini yeşile çevir, spinner'ı görünmez yap.' Yani arayüzdeki her elemanın durumunu adım adım elle yönetmeniz gerekirdi.
Jetpack Compose ile gelen 'Bildirimsel' (Declarative) yaklaşımda ise arayüz, o anki verinin (State) doğrudan bir yansımasıdır: 'Eğer veri kaydedildiyse buton yeşil ve üzerinde Kaydedildi yazsın; değilse mavi olsun.' Siz sadece durumları tanımlarsınız; veriniz değiştiğinde Compose arayüzün sadece ilgili kısımlarını otomatik olarak yeniden çizer (Recomposition).

Jetpack Compose Nasıl Çalışır? (@Composable Fonksiyonlar):
Compose'da her arayüz elemanı, önüne @Composable notasyonu eklenmiş sıradan bir Kotlin fonksiyonudur. Artık XML dosyası açıp kapatmak, tema dosyasında kaybolmak veya adapter yazmak yok! Örneğin bir kart içine başlık ve buton koymak şu kadar yalındır:

@Composable
fun SelamlamaKarti(isim: String) {
var tiklandi by remember { mutableStateOf(false) }
Card(modifier = Modifier.padding(16.dp)) {
Column(modifier = Modifier.padding(16.dp)) {
Text(text = "Merhaba, $isim!")
Button(onClick = { tiklandi = !tiklandi }) {
Text(if (tiklandi) "Teşekkürler!" else "Bana Tıkla")
}
}
}
}
Tek bir fonksiyon içinde hem tasarım, hem mantık, hem de durum yönetimi tertemiz bir şekilde yer alır.

Klasik RecyclerView Eziyetine Son: LazyColumn ve Performans:
Eski Android geliştirmede en çok vakit alan işlerden biri liste tasarlamaktı: Bir RecyclerView tanımla, liste satırı için ayrı bir XML oluştur, bir Adapter sınıfı yaz, ViewHolder bağla, DiffUtil implemente et... Yüzlerce satır şablon kod!
Jetpack Compose'da ise aynı performans ve bellek tasarrufunu sağlayan liste sadece birkaç satırdır:
LazyColumn {
items(ogrenciListesi) { ogrenci ->
OgrenciKarti(ogrenci)
}
}
Compose, sadece ekranda görünen öğeleri belleğe alır ve muazzam bir akıcılıkla donanım hızlandırmalı olarak render eder.

Geleceğe Yatırım: Compose'a Geçmeli misiniz?:
Google artık resmi dokümantasyonlarında tüm yeni Android projelerinin Jetpack Compose ile başlatılmasını tavsiye ediyor. Ayrıca Kotlin Multiplatform (KMP / Compose Multiplatform) sayesinde aynı Compose arayüz kodunu artık hem Android'de, hem iOS'ta, hem masaüstünde hem de webde çalıştırmak mümkün hale geldi. Eğer Android dünyasında geleceğe hazır, temiz, az kodla çok iş üreten ve bakımı kolay uygulamalar geliştirmek istiyorsanız, XML'i geride bırakıp Jetpack Compose dünyasına adım atmanın tam zamanı.

← Diğer Yazılar Fikirlerini Paylaş →