Kotlin Access Modifiers – ব্রেইন-ফ্রেন্ডলি ব্যাখ্যা!

 

🛡️ Kotlin Access Modifiers – ব্রেইন-ফ্রেন্ডলি ব্যাখ্যা!

🎯 Access Modifier বলতে বোঝায় একটি ভেরিয়েবল, ফাংশন বা ক্লাস কোথা থেকে এক্সেস করা যাবে আর কোথা থেকে নয়।

Kotlin-এ ৪টি Access Modifier আছে:
1️⃣ public 👉 সব জায়গায় এক্সেসযোগ্য
2️⃣ private 👉 শুধু নিজের ক্লাসের ভিতরেই এক্সেসযোগ্য
3️⃣ protected 👉 নিজের ক্লাস + ইনহেরিট করা ক্লাসের ভিতরে এক্সেসযোগ্য
4️⃣ internal 👉 শুধু একই মডিউলের মধ্যে এক্সেসযোগ্য


🔹 1️⃣ public – সবার জন্য উন্মুক্ত!

👉 এটি Default Modifier (মানে, যদি কিছু না লেখেন, এটি ধরে নেওয়া হয়)

class Person {
    public var name: String = "John"  // 👀 Public: সব জায়গা থেকে এক্সেস করা যাবে
}

fun main() {
    val person = Person()
    println(person.name)  // ✅ Output: John
}

📌 এখানে:
✅ name ভেরিয়েবল যেকোনো জায়গা থেকে এক্সেস করা যাবে কারণ এটি public।


🔹 2️⃣ private – শুধুমাত্র নিজের ভিতরেই!

👉 কোনো ক্লাসের private মেম্বার সেই ক্লাসের বাইরে এক্সেস করা যাবে না।

class BankAccount {
    private var balance: Double = 1000.0  // 🔒 শুধু BankAccount ক্লাসের ভিতরেই অ্যাক্সেসযোগ্য

    fun getBalance(): Double {
        return balance
    }
}

fun main() {
    val account = BankAccount()
    // println(account.balance)  // ❌ Error: Cannot access 'balance'
    println(account.getBalance())  // ✅ Output: 1000.0
}

📌 এখানে:
✅ balance ভেরিয়েবল প্রাইভেট, তাই বাইরে থেকে এক্সেস করা যাবে না।
✅ getBalance() মেথড দিয়ে আমরা নিরাপদভাবে ব্যালেন্স দেখতে পারছি।


🔹 3️⃣ protected – নিজের + Inherited ক্লাসের জন্য!

👉 প্রাইভেটের মতোই, কিন্তু চাইল্ড ক্লাসেও ব্যবহার করা যাবে!

open class Animal {
    protected fun makeSound() {
        println("Animal makes a sound!")
    }
}

class Dog : Animal() {
    fun bark() {
        makeSound()  // ✅ Protected মেথড চাইল্ড ক্লাস থেকে এক্সেস করা যাচ্ছে
        println("Dog is barking!")
    }
}

fun main() {
    val dog = Dog()
    dog.bark()
    // dog.makeSound()  // ❌ Error: Protected মেথড বাইরে থেকে এক্সেস করা যাবে না!
}

📌 এখানে:
✅ makeSound() প্রোটেক্টেড, তাই Dog ক্লাস এটিকে এক্সেস করতে পারছে।
❌ কিন্তু main() ফাংশন থেকে makeSound() সরাসরি কল করা যাবে না!


🔹 4️⃣ internal – শুধু একই মডিউলের মধ্যে!

👉 একই মডিউলের বাইরে internal মেম্বার অ্যাক্সেস করা যাবে না।

internal class Car {
    internal var brand: String = "Toyota"
}

fun main() {
    val car = Car()
    println(car.brand)  // ✅ Output: Toyota (কারণ আমরা একই মডিউলের মধ্যে আছি)
}

📌 এখানে:
✅ internal মানে এটি শুধু এই মডিউলের মধ্যে এক্সেস করা যাবে।
❌ যদি অন্য মডিউল থেকে অ্যাক্সেস করতে চান, তাহলে Error আসবে!


🔥 Access Modifiers – তুলনামূলক চেকলিস্ট!

Modifier এক্সেস কোথায়? বাইরে থেকে এক্সেস করা যাবে? চাইল্ড ক্লাস থেকে? অন্য মডিউল থেকে?
public সব জায়গায় ✅ হ্যাঁ ✅ হ্যাঁ ✅ হ্যাঁ
private শুধু নিজের ক্লাসে ❌ না ❌ না ❌ না
protected নিজের + চাইল্ড ক্লাসে ❌ না ✅ হ্যাঁ ❌ না
internal একই মডিউলের মধ্যে ✅ হ্যাঁ (শুধু মডিউলের ভিতরে) ✅ হ্যাঁ (শুধু মডিউলের ভিতরে) ❌ না

🎯 সংক্ষেপে:

✔️ public 👉 সব জায়গায় অ্যাক্সেস করা যাবে।
✔️ private 👉 শুধু নিজের ক্লাসের ভিতরে অ্যাক্সেসযোগ্য।
✔️ protected 👉 নিজের + ইনহেরিট করা ক্লাসের মধ্যে এক্সেসযোগ্য।
✔️ internal 👉 শুধু একই মডিউলের মধ্যে অ্যাক্সেসযোগ্য।

✅ এখন আপনি Kotlin Access Modifiers পুরো বুঝে গেছেন! 🚀🔥
💡 এবার নিজে প্র্যাকটিস করুন! 😎

Comments

Popular posts from this blog

AI (Artificial Intelligence) সহজভাবে বোঝার জন্য একদম মস্তিষ্ক-বান্ধব ব্যাখ্যা 🧠🤖

🧠 Regex কী?

Kotlin-এ ভেরিয়েবল ঘোষণা করার দুই উপায়