object Kotlin'de varsayılan olarak tembel başlatma ve iş parçacığı güvenliği ile bir singleton nesne oluşturmanın bildirimsel bir yoludur. object anahtar sözcüğü, tek bir örnekle tüm bir sınıfı değiştirir ve singleton, companion object, anonim nesneler ve statik yardımcı programlar bildirmek için kullanılır. JetBrains Kotlin Belgeleri'ne (2026) göre, object declaration JVM dünyasında bir singleton uygulamanın en basit ve en güvenli yoludur.
Önemli Noktalar
object Kotlin'de aynı anda bir sınıfı tanımlayan ve onun tek örneğini (singleton) oluşturan özel bir bildirim biçimidir. Tek bir yapıda sınıf bildirimi ve örnek oluşturmanın bir melezidir.
Java'da bir singleton oluşturmak için özel bir kurucu, statik bir alan, bir getInstance metodu ve iş parçacığı güvenliği işlemesi gerekir. Kotlin object bunu tek bir kod satırıyla yapar: object MySingleton { }. Derleyici, JVM bayt kodunda static initializer mekanizmasını kullanarak otomatik olarak iş parçacığı güvenli tembel başlatma oluşturur.
Kotlin Dil Belirtimi'ne (2026) göre, object declaration özel bir kurucu ve statik bir blokta başlatılan statik bir INSTANCE alanına sahip final bir sınıfa derlenir. Bu, JVM düzeyinde başlatma atomisitesini garanti eder.
Object declaration (singleton nesne), object anahtar sözcüğünün ardından bir ad kullanılarak bildirilir. Nesne gövdesi özellikler, metotlar, init blokları içerebilir ve diğer sınıfları veya arayüzleri miras alabilir.
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// sorgu yürütülüyor
return emptyList()
}
}
// Kullanım
DatabaseManager.query("SELECT * FROM users")
DatabaseManager'ın başlatılması ilk erişimde gerçekleşir — tembel ve iş parçacığı güvenli. Ek senkronizasyon kodu gerekmez.
Object normal sınıfları ve arayüzleri miras alabilir. Bu, tek bir örnekle soyut bir sınıf veya arayüzün uygulaması olarak object kullanılmasına olanak tanır.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object, bir sınıfın içinde companion anahtar sözcüğüyle bildirilen özel bir object'tir. Kotlin'de static anahtar sözcüğü olmadığı için statik üyelerin yerini alır.
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// ApiClient örneği oluşturmadan çağrı
val client = ApiClient.create()
Companion object bir ada sahip olabilir (varsayılan Companion), arayüzler uygulayabilir ve extension functions aracılığıyla genişletilebilir. Java'daki statik metotların aksine, companion object argüman olarak aktarılabilen veya bir değişkende saklanabilen tam teşekküllü bir nesnedir.
Kotlin En İyi Uygulamaları'na (2026) göre, companion object fabrika metotları, sabitler ve sınıfla ilgili statik yardımcı programlar için kullanılır. Companion object'in aşırı kullanımından kaçınılması önerilir — ilgisiz yardımcı programlar için üst düzey işlevler tercih edilir.
Java uyumluluğu için, companion object metotları @JvmStatic ile ek açıklama alabilir. Bu, JVM bayt kodunda gerçek bir statik metot oluşturur ve Companion sözdizimi olmadan Java kodundan erişilebilir.
Object expression, ayrı bir adlandırılmış sınıf bildirmeden bir sınıf veya arayüzün metotlarını geçersiz kılmak için anında oluşturulan anonim bir nesnedir.
val handler = object : Runnable {
override fun run() {
println("Görev yürütüldü")
}
}
thread(handler)
Object expressions, her yürütüldüklerinde yeni bir örnek oluşturmaları bakımından object bildirimlerinden farklıdır. Singleton değildirler ve adları yoktur. Anonim nesneler, tıpkı lambdalar gibi kapanışlarından değişken yakalayabilir.
Anonim sınıfların yalnızca bir türü miras alabildiği Java'nın aksine, Kotlin'in object expression'ı aynı anda birden çok türü miras alabilir.
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("Düğme işleniyor")
override fun click() = println("Düğme tıklandı")
}
Object Kotlin'in en çok yönlü yapılarından biridir ve birçok senaryoda kullanılır.
Android projelerinde, birden çok örneğin gerekli olmadığı bir Repository bildirmek için object sıklıkla kullanılır. Tek bir örnek veri tutarlılığını sağlar.
object UserRepository {
fun getUser(id: Int): User? {
// kullanıcı alınıyor
return null
}
}
Companion object ile fabrika metotları, birden çok kurucuya bir alternatiftir. Adlandırılmış fabrika metotları kodu kendi kendini belgeleyen hale getirir.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object sabitler için bir kapsayıcı görevi görebilir ve Java'daki static final alanlarının yerini alabilir. Object kalıtımı destekler, bu da yapılandırma hiyerarşileri oluşturmaya olanak tanır.
Kotlin Standart Kütüphanesi'ne (2026) göre, object declaration Kotlin'de singleton oluşturmanın en verimli yoludur, double-checked locking uygulamalarını geride bırakır ve Java'daki enum singleton ile karşılaştırılabilir.
Sıkça Sorulan Sorular
Object aynı anda bir sınıf bildirir ve onun tek örneğini oluşturur. Normal bir sınıf, bir kurucu aracılığıyla oluşturulan birden çok örneğe sahip olabilir.
Tembel — nesneye ilk erişimde. O ana kadar bellek ayrılmaz ve init bloğundaki kod yürütülmez.
Hayır, object açık bir kurucuya sahip olamaz. Başlatma, nesneye ilk erişimde bir kez çağrılan init bloğunda gerçekleştirilir.
companion object, bir sınıfın içinde bildirilen bir object'tir. Üyelerine, bir örnek oluşturmadan sınıf adı aracılığıyla erişilebilir ve Java'nın statik üyelerinin yerini alır.
Evet, object başlatması JVM statik başlatıcısı sayesinde tamamen thread-safe'dir. Ek senkronizasyon gerekmez.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun