object di Kotlin: apa itu, sintaks dan penerapan objek singleton

Penulis: IT Sectr Diterbitkan: 2026-06-21 Waktu membaca: 9 mnt

object di Kotlin — adalah cara deklaratif untuk membuat objek singleton dengan inisialisasi malas dan keamanan utas secara default. Kata kunci object menggantikan seluruh kelas dengan satu instance dan digunakan untuk mendeklarasikan singleton, companion object, objek anonim, dan utilitas statis. Menurut JetBrains Kotlin Documentation (2026), object declaration adalah cara paling sederhana dan aman untuk mengimplementasikan singleton di dunia JVM.

Poin Utama

  • object — kata kunci untuk mendeklarasikan kelas singleton dengan satu instance
  • Inisialisasi malas — object dibuat saat akses pertama, bukan saat pemuatan kelas
  • Companion object — analog anggota statis di Kotlin (tidak ada kata kunci static)
  • Object expression — objek anonim untuk menimpa metode secara langsung
  • Keamanan utas — inisialisasi object dijamin thread-safe

Apa itu object di Kotlin?

object di Kotlin — adalah bentuk deklarasi khusus yang sekaligus mendefinisikan kelas dan membuat satu-satunya instance (singleton). Ini adalah hibrida dari class declaration dan instance creation dalam satu konstruksi.

Di Java untuk membuat singleton, Anda perlu menulis konstruktor privat, field statis, metode getInstance, dan menangani keamanan utas. Kotlin object melakukannya dengan satu baris kode: object MySingleton { }. Kompiler secara otomatis menghasilkan inisialisasi malas yang aman untuk utas menggunakan mekanisme static initializer dalam bytecode JVM.

Menurut Kotlin Language Specification (2026), object declaration dikompilasi menjadi kelas final dengan konstruktor privat dan field statis INSTANCE, yang diinisialisasi dalam blok statis. Ini menjamin atomicitas inisialisasi di tingkat JVM.

Objek singleton (object declaration)

Object declaration (objek singleton) dideklarasikan menggunakan kata kunci object, diikuti oleh nama. Badan objek dapat berisi properti, metode, blok init, dan mewarisi kelas atau antarmuka lain.

kotlin
object DatabaseManager {
    private val connection: String = "jdbc:postgresql://localhost:5432/app"
    
    fun query(sql: String): List<Map<String, Any>> {
        // mengeksekusi query
        return emptyList()
    }
}

// Penggunaan
DatabaseManager.query("SELECT * FROM users")

Inisialisasi DatabaseManager terjadi pada saat akses pertama — malas dan aman untuk utas. Tidak ada kode tambahan untuk sinkronisasi yang diperlukan.

Pewarisan untuk object

Object dapat mewarisi kelas biasa dan antarmuka. Ini memungkinkan penggunaan object sebagai implementasi kelas abstrak atau antarmuka dengan satu instance.

kotlin
interface Logger {
    fun log(message: String)
}

object ConsoleLogger : Logger {
    override fun log(message: String) {
        println("[LOG] $message")
    }
}

Companion object

companion object — adalah object khusus yang dideklarasikan di dalam kelas dengan kata kunci companion. Ini menggantikan anggota statis di Kotlin, karena dalam bahasa ini tidak ada kata kunci static.

kotlin
class ApiClient {
    companion object {
        private const val BASE_URL = "https://api.example.com"
        
        fun create(): ApiClient {
            return ApiClient()
        }
    }
}

// Memanggil tanpa membuat instance ApiClient
val client = ApiClient.create()

Companion object dapat memiliki nama (standarnya Companion), mengimplementasikan antarmuka, dan diperluas melalui extension functions. Berbeda dengan metode statis di Java, companion object adalah objek lengkap yang dapat diteruskan sebagai argumen atau disimpan dalam variabel.

Menurut Kotlin Best Practices (2026), companion object digunakan untuk metode pabrik, konstanta, dan utilitas statis yang terkait dengan kelas. Disarankan untuk menghindari penggunaan companion object yang berlebihan — untuk utilitas yang tidak terkait, lebih baik menggunakan fungsi tingkat atas.

Anotasi @JvmStatic

Untuk kompatibilitas dengan Java, metode companion object dapat dianotasi dengan @JvmStatic. Ini menghasilkan metode statis nyata dalam bytecode JVM, yang dapat diakses dari kode Java tanpa sintaks Companion.

Object expressions (objek anonim)

Object expression — adalah objek anonim yang dibuat di tempat untuk menimpa metode kelas atau antarmuka tanpa mendeklarasikan kelas bernama terpisah.

kotlin
val handler = object : Runnable {
    override fun run() {
        println("Tugas dijalankan")
    }
}

thread(handler)

Object expressions berbeda dari deklarasi object karena mereka membuat instance baru setiap kali dieksekusi. Mereka bukan singleton dan tidak memiliki nama. Objek anonim dapat menangkap variabel dari penutupan, seperti halnya lambda.

Berbeda dengan Java, di mana kelas anonim hanya dapat mewarisi satu tipe, Kotlin object expression dapat mewarisi beberapa tipe sekaligus.

kotlin
interface Clickable {
    fun click()
}

abstract class View {
    abstract fun render()
}

val button = object : View(), Clickable {
    override fun render() = println("Merender tombol")
    override fun click() = println("Tombol diklik")
}

Skenario penggunaan praktis

Object — salah satu konstruksi Kotlin yang paling serbaguna, digunakan dalam banyak skenario.

Repository singleton

Di proyek Android, object sering digunakan untuk mendeklarasikan Repository, di mana tidak diperlukan banyak instance. Satu instance menjamin konsistensi data.

kotlin
object UserRepository {
    fun getUser(id: Int): User? {
        // mendapatkan pengguna
        return null
    }
}

Metode pabrik melalui companion object

Companion object dengan metode pabrik — alternatif untuk beberapa konstruktor. Metode pabrik bernama membuat kode menjadi self-documenting.

kotlin
data class GsonParser {
    companion object {
        fun create(): GsonParser = GsonParser()
        fun createPretty(): GsonParser = GsonParser()
    }
}

Konstanta dan enumerasi

Object dapat berfungsi sebagai wadah untuk konstanta, menggantikan field static final di Java. Object mendukung pewarisan, memungkinkan pembuatan hierarki konfigurasi.

Menurut Kotlin Standard Library (2026), object declaration adalah cara paling performant untuk membuat singleton di Kotlin, melampaui implementasi "double-checked locking" dalam kecepatan dan sebanding dengan enum singleton di Java.

Pertanyaan yang Sering Diajukan

Apa perbedaan object dengan kelas biasa?

Object sekaligus mendeklarasikan kelas dan membuat satu-satunya instance. Kelas biasa dapat memiliki banyak instance yang dibuat melalui konstruktor.

Kapan object declaration diinisialisasi?

Malas — saat akses pertama ke objek. Sebelum itu, memori tidak dialokasikan dan kode di blok init tidak dijalankan.

Bisakah object memiliki konstruktor?

Tidak, object tidak dapat memiliki konstruktor eksplisit. Inisialisasi dilakukan di blok init, yang dipanggil sekali pada akses pertama ke objek.

Apa perbedaan companion object dengan object biasa?

companion object — adalah object yang dideklarasikan di dalam kelas. Anggotanya dapat diakses melalui nama kelas tanpa membuat instance, menggantikan anggota statis Java.

Apakah object declarations aman di lingkungan multi-utas?

Ya, inisialisasi object sepenuhnya thread-safe berkat inisialisator statis JVM. Tidak diperlukan sinkronisasi tambahan.

Ringkasan

  • object — singleton deklaratif dengan inisialisasi malas dan thread-safe
  • companion object — anggota statis di Kotlin, metode pabrik, konstanta
  • Object expression — objek anonim di tempat dengan penangkapan variabel dari penutupan
  • Pewarisan — object dapat mewarisi kelas dan antarmuka, termasuk beberapa tipe
  • Performa — inisialisasi melalui static initializer JVM, tanpa overhead double-checked locking
  • Penggunaan — layanan singleton, repository, konstanta, pabrik, adaptor listener
  • Keterbatasan — tidak ada konstruktor eksplisit, satu instance untuk seluruh JVM

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga