object Kotlin-এ একটি সিঙ্গলটন অবজেক্ট তৈরি করার ঘোষণামূলক উপায় যা ডিফল্টভাবে লেজি ইনিশিয়ালাইজেশন এবং থ্রেড সেফটি সহ আসে। object কীওয়ার্ড একটি সম্পূর্ণ ক্লাসকে একটি একক ইনস্ট্যান্স দিয়ে প্রতিস্থাপন করে এবং সিঙ্গলটন, companion object, anonymous object এবং স্ট্যাটিক ইউটিলিটি ঘোষণার জন্য ব্যবহৃত হয়। JetBrains Kotlin Documentation (2026) অনুসারে, object declaration JVM-জগতে সিঙ্গলটন বাস্তবায়নের সবচেয়ে সহজ এবং নিরাপদ উপায়।
মূল বিষয়
object Kotlin-এ একটি বিশেষ ঘোষণা ফর্ম যা একইসঙ্গে একটি ক্লাস সংজ্ঞায়িত করে এবং তার একক ইনস্ট্যান্স (সিঙ্গলটন) তৈরি করে। এটি একটি কন্সট্রাক্টে ক্লাস ঘোষণা এবং ইনস্ট্যান্স তৈরির সংমিশ্রণ।
Java-তে, সিঙ্গলটন তৈরি করতে একটি প্রাইভেট কন্সট্রাক্টর, একটি স্ট্যাটিক ফিল্ড, একটি getInstance মেথড এবং থ্রেড সুরক্ষা ব্যবস্থাপনার প্রয়োজন হয়। Kotlin object এটি কোডের এক লাইনে করে: object MySingleton { }। কম্পাইলার স্বয়ংক্রিয়ভাবে JVM বাইটকোডে static initializer প্রক্রিয়া ব্যবহার করে থ্রেড-সেফ লেজি ইনিশিয়ালাইজেশন জেনারেট করে।
Kotlin ভাষা স্পেসিফিকেশন (2026) অনুসারে, object declaration একটি ফাইনাল ক্লাসে কম্পাইল হয় যার একটি প্রাইভেট কন্সট্রাক্টর এবং একটি স্ট্যাটিক ব্লকে ইনিশিয়ালাইজড স্ট্যাটিক INSTANCE ফিল্ড থাকে। এটি JVM স্তরে ইনিশিয়ালাইজেশনের পারমাণবিকতা নিশ্চিত করে।
Object declaration (সিঙ্গলটন অবজেক্ট) object কীওয়ার্ডের পরে একটি নাম ব্যবহার করে ঘোষণা করা হয়। অবজেক্টের বডিতে প্রপার্টি, মেথড, init ব্লক থাকতে পারে এবং এটি অন্যান্য ক্লাস বা ইন্টারফেস ইনহেরিট করতে পারে।
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// কোয়েরি এক্সিকিউট করা
return emptyList()
}
}
// ব্যবহার
DatabaseManager.query("SELECT * FROM users")
DatabaseManager-এর ইনিশিয়ালাইজেশন প্রথম অ্যাক্সেসে ঘটে - লেজি এবং থ্রেড-সেফ। কোনো অতিরিক্ত সিঙ্ক্রোনাইজেশন কোডের প্রয়োজন নেই।
Object সাধারণ ক্লাস এবং ইন্টারফেস ইনহেরিট করতে পারে। এটি একটি একক ইনস্ট্যান্স সহ একটি অ্যাবস্ট্রাক্ট ক্লাস বা ইন্টারফেসের বাস্তবায়ন হিসাবে object ব্যবহার করার অনুমতি দেয়।
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object হল একটি বিশেষ object যা একটি ক্লাসের ভিতরে companion কীওয়ার্ড দিয়ে ঘোষণা করা হয়। এটি Kotlin-এ স্ট্যাটিক সদস্যদের প্রতিস্থাপন করে কারণ ভাষায় static কীওয়ার্ড নেই।
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// ApiClient ইনস্ট্যান্স না তৈরি করেই কল করা
val client = ApiClient.create()
Companion object-এর একটি নাম থাকতে পারে (ডিফল্ট Companion), ইন্টারফেস বাস্তবায়ন করতে পারে এবং extension functions-এর মাধ্যমে বিস্তৃত করা যেতে পারে। Java-তে স্ট্যাটিক মেথডের বিপরীতে, companion object হল একটি পূর্ণাঙ্গ অবজেক্ট যা আর্গুমেন্ট হিসাবে পাস বা ভেরিয়েবলে সংরক্ষণ করা যেতে পারে।
Kotlin সর্বোত্তম অনুশীলন (2026) অনুসারে, companion object ফ্যাক্টরি মেথড, কনস্ট্যান্ট এবং ক্লাস-সম্পর্কিত স্ট্যাটিক ইউটিলিটির জন্য ব্যবহৃত হয়। companion object-এর অতিরিক্ত ব্যবহার এড়ানোর পরামর্শ দেওয়া হয় - সম্পর্কহীন ইউটিলিটির জন্য টপ-লেভেল ফাংশন ভালো।
Java সামঞ্জস্যের জন্য, companion object মেথডগুলো @JvmStatic দিয়ে অ্যানোটেট করা যেতে পারে। এটি JVM বাইটকোডে একটি প্রকৃত স্ট্যাটিক মেথড জেনারেট করে, যা Companion সিনট্যাক্স ছাড়াই Java কোড থেকে অ্যাক্সেসযোগ্য।
Object expression হল একটি anonymous object যা কোনো ক্লাস বা ইন্টারফেসের মেথড ওভাররাইড করার জন্য তাৎক্ষণিকভাবে তৈরি করা হয়, আলাদা নামযুক্ত ক্লাস ঘোষণা না করেই।
val handler = object : Runnable {
override fun run() {
println("কার্য সম্পাদিত হয়েছে")
}
}
thread(handler)
Object expressions object ঘোষণা থেকে ভিন্ন কারণ তারা প্রতিটি এক্সিকিউশনে একটি নতুন ইনস্ট্যান্স তৈরি করে। এগুলি সিঙ্গলটন নয় এবং এদের কোনো নাম নেই। anonymous object ল্যাম্বডার মতো তাদের ক্লোজার থেকে ভেরিয়েবল ক্যাপচার করতে পারে।
Java-র বিপরীতে, যেখানে anonymous class শুধুমাত্র একটি টাইপ ইনহেরিট করতে পারে, Kotlin-এর object expression একসাথে একাধিক টাইপ ইনহেরিট করতে পারে।
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("বাটন রেন্ডার হচ্ছে")
override fun click() = println("বাটনে ক্লিক করা হয়েছে")
}
Object Kotlin-এর সবচেয়ে বহুমুখী কন্সট্রাক্টগুলির মধ্যে একটি, অনেক দৃশ্যকল্পে ব্যবহৃত হয়।
Android প্রকল্পে, object প্রায়শই Repository ঘোষণার জন্য ব্যবহৃত হয় যেখানে একাধিক ইনস্ট্যান্সের প্রয়োজন নেই। একটি একক ইনস্ট্যান্স ডেটা সামঞ্জস্য নিশ্চিত করে।
object UserRepository {
fun getUser(id: Int): User? {
// ব্যবহারকারী পাওয়া হচ্ছে
return null
}
}
Companion object ফ্যাক্টরি মেথড সহ একাধিক কন্সট্রাক্টরের বিকল্প। নামযুক্ত ফ্যাক্টরি মেথড কোডকে স্ব-ডকুমেন্টিং করে তোলে।
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object কনস্ট্যান্টের জন্য একটি কন্টেইনার হিসাবে কাজ করতে পারে, Java-তে static final ফিল্ড প্রতিস্থাপন করে। Object ইনহেরিটেন্স সমর্থন করে, যা কনফিগারেশন হায়ারার্কি তৈরি করতে দেয়।
Kotlin স্ট্যান্ডার্ড লাইব্রেরি (2026) অনুসারে, object declaration Kotlin-এ সিঙ্গলটন তৈরি করার সবচেয়ে কার্যকরী উপায়, যা double-checked locking বাস্তবায়নকে ছাড়িয়ে যায় এবং Java-তে enum singleton-এর সাথে তুলনীয়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Object একইসঙ্গে একটি ক্লাস ঘোষণা করে এবং তার একক ইনস্ট্যান্স তৈরি করে। একটি সাধারণ ক্লাসের কন্সট্রাক্টরের মাধ্যমে তৈরি একাধিক ইনস্ট্যান্স থাকতে পারে।
লেজি - অবজেক্টে প্রথম অ্যাক্সেসে। ততক্ষণ পর্যন্ত, কোনো মেমোরি বরাদ্দ হয় না এবং init ব্লকের কোড এক্সিকিউট হয় না।
না, object-এর স্পষ্ট কন্সট্রাক্টর থাকতে পারে না। ইনিশিয়ালাইজেশন init ব্লকে সম্পাদিত হয়, যা অবজেক্টে প্রথম অ্যাক্সেসে একবার কল হয়।
companion object হল একটি object যা একটি ক্লাসের ভিতরে ঘোষণা করা হয়। এর সদস্যরা ইনস্ট্যান্স তৈরি না করেই ক্লাসের নামের মাধ্যমে অ্যাক্সেসযোগ্য, Java-র স্ট্যাটিক সদস্যদের প্রতিস্থাপন করে।
হ্যাঁ, object-এর ইনিশিয়ালাইজেশন JVM স্ট্যাটিক ইনিশিয়ালাইজারের কারণে সম্পূর্ণ thread-safe। কোনো অতিরিক্ত সিঙ্ক্রোনাইজেশনের প্রয়োজন নেই।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন