Annotations হল একটি ধরনের মেটাডেটা (metadata) যা কোডের বিভিন্ন অংশে অতিরিক্ত তথ্য যোগ করতে ব্যবহৃত হয়। এটি কোডের আচরণ বা কাজ সম্পর্কে বিশেষ নির্দেশনা প্রদান করতে পারে। আনোটেশনগুলি কোডের রানটাইম, কম্পাইল টাইম অথবা ডেভেলপমেন্ট পর্যায়ে ব্যবহৃত হতে পারে এবং এগুলি মূল কোডের কার্যকারিতা বা কার্যক্রমের পরিবর্তন ঘটাতে পারে না, তবে কোডের মাধ্যমে অতিরিক্ত তথ্য প্রদান করতে সহায়তা করে।
জাভাতে আনোটেশনগুলি একটি সাধারণ কনভেনশন হিসেবে ব্যবহৃত হয় এবং এটি কোডকে আরও পরিষ্কার, দৃশ্যমান এবং মেইনটেইনযোগ্য করে তোলে।
Java Annotations কি?
জাভাতে আনোটেশন একটি বিশেষ ধরণের ট্যাগ যা কোডে যোগ করা হয় এবং একটি স্পেসিফিক সিগনেচারের মাধ্যমে সেই কোডের বিশেষ কিছু অংশে অতিরিক্ত তথ্য বা নির্দেশনা প্রদান করা হয়। আনোটেশনগুলি সাধারণত @ চিহ্ন দিয়ে শুরু হয় এবং এর পরে আনোটেশনটির নাম আসে।
উদাহরণস্বরূপ:
@Override
public String toString() {
return "Example";
}
এখানে @Override হল একটি আনোটেশন যা বলে যে, এই মেথডটি সুপার ক্লাসের মেথডটিকে ওভাররাইড করছে।
Annotations এর ধরন
- Predefined Annotations:
@Override: এটি সুপার ক্লাসের একটি মেথডকে ওভাররাইড করছে তা নিশ্চিত করে।@Deprecated: এটি একটি মেথড বা ক্লাসকে ডিপ্রিকেটেড (অব্যবহৃত) ঘোষণা করে, অর্থাৎ ভবিষ্যতে এটি ব্যবহার থেকে বিরত থাকার জন্য সিগন্যাল দেয়।@SuppressWarnings: এটি কম্পাইলারকে কিছু নির্দিষ্ট সতর্কতা উপেক্ষা করতে নির্দেশ দেয়।@FunctionalInterface: এটি একটি ফাংশনাল ইন্টারফেস ঘোষণা করতে ব্যবহৃত হয়, যেখানে শুধুমাত্র একটাই অ্যাবস্ট্র্যাক্ট মেথড থাকতে পারে।
Custom Annotations: আপনি নিজের প্রয়োজন অনুযায়ী আনোটেশন তৈরি করতে পারেন। কাস্টম আনোটেশন তৈরি করার জন্য
@interfaceব্যবহার করা হয়।উদাহরণ:
@interface MyAnnotation { String value() default "Hello"; } public class Example { @MyAnnotation(value = "This is a custom annotation") public void myMethod() { System.out.println("Method with custom annotation"); } }- Retention Policy: আনোটেশনগুলির জন্য একটি Retention Policy থাকে যা বলে যে আনোটেশনটি কোথায় ব্যবহার করা যাবে। এটি তিন ধরনের হতে পারে:
@Retention(RetentionPolicy.SOURCE): শুধু সোর্স কোডে উপস্থিত থাকে, কম্পাইল করার সময় এটি মুছে ফেলা হয়।@Retention(RetentionPolicy.CLASS): কম্পাইলেশন পরবর্তী ক্লাস ফাইলের মধ্যে থাকে, কিন্তু রানটাইমে এটি থাকে না।@Retention(RetentionPolicy.RUNTIME): রানটাইমেও এটি থাকে এবং রিফ্লেকশন বা অন্যান্য প্রক্রিয়া দ্বারা অ্যাক্সেস করা যায়।
Annotations কেন প্রয়োজন?
- Code Readability & Maintenance:
- আনোটেশন কোডের উদ্দেশ্য বা কাজ সম্পর্কে অতিরিক্ত তথ্য প্রদান করে, যা কোড রিডিং এবং মেইনটেনেন্সকে সহজ করে তোলে।
- এটি ডেভেলপারদের জন্য নির্দেশনা প্রদান করে, যেমন কোন মেথড ওভাররাইড হচ্ছে, কোন মেথড ডিপ্রিকেটেড ইত্যাদি।
- Code Generation:
- আনোটেশন ব্যবহার করে কোড জেনারেটর বা ফ্রেমওয়ার্কগুলি কোডের ওপর ভিত্তি করে নতুন কোড তৈরি করতে পারে, যেমন Java Persistence API (JPA) এর মাধ্যমে ডাটাবেস মডেল তৈরি করা বা Spring Framework এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন।
- Compile-Time Checking:
- কিছু আনোটেশন কম্পাইল টাইমে ত্রুটি চেকিং করতে সহায়তা করে। উদাহরণস্বরূপ,
@Overrideআনোটেশনটি ব্যবহার করার ফলে আপনি নিশ্চিত হতে পারেন যে, মেথডটি সঠিকভাবে সুপার ক্লাসের মেথডকে ওভাররাইড করছে কিনা। - এই ধরনের আনোটেশনগুলো কম্পাইলারকে ত্রুটি চিহ্নিত করতে সহায়তা করে।
- কিছু আনোটেশন কম্পাইল টাইমে ত্রুটি চেকিং করতে সহায়তা করে। উদাহরণস্বরূপ,
- Runtime Behavior Modification:
- কিছু আনোটেশন রানটাইমে কোডের আচরণ পরিবর্তন করতে পারে, যেমন Spring Framework এর
@Transactionalআনোটেশনটি ডাটাবেস ট্রানজেকশন পরিচালনা করতে ব্যবহৃত হয়। - JUnit বা অন্য টেস্টিং ফ্রেমওয়ার্কগুলো টেস্ট মেথডে আনোটেশন ব্যবহার করে টেস্ট ক্যাটাগরি বা টেস্ট এক্সিকিউশন কন্ট্রোল করতে পারে।
- কিছু আনোটেশন রানটাইমে কোডের আচরণ পরিবর্তন করতে পারে, যেমন Spring Framework এর
- Separation of Concerns (SoC):
- আনোটেশন কোডের মূল কার্যক্রম থেকে অতিরিক্ত তথ্য বা কার্যক্রম আলাদা করে দেয়। উদাহরণস্বরূপ, Spring Framework এর ডিপেনডেন্সি ইনজেকশন ব্যবস্থায়, কোডের লজিক থেকে ডিপেনডেন্সি ইনজেকশন সংক্রান্ত তথ্য আলাদা করা হয়।
- Code Documentation:
- আনোটেশনগুলি কোড ডকুমেন্টেশন হিসেবে কাজ করতে পারে, বিশেষত কাস্টম আনোটেশনগুলি। এটি কোডে বিস্তারিতভাবে কাজ করতে এবং এর ব্যবহারের উদ্দেশ্য জানতে সহায়ক।
আনোটেশন এবং রিফ্লেকশন
জাভা রিফ্লেকশন (Java Reflection) এর মাধ্যমে আপনি রানটাইমে আনোটেশনগুলিকে অ্যাক্সেস করতে পারেন। এটি ডাইনামিকভাবে কোডের ওপর প্রভাব ফেলতে সাহায্য করে এবং আনোটেশনগুলির জন্য নির্দিষ্ট আচরণ তৈরি করতে পারে।
রানটাইমে আনোটেশন অ্যাক্সেস:
import java.lang.annotation.*;
import java.lang.reflect.Method;
// কাস্টম আনোটেশন
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String description() default "Default Description";
}
class Example {
@MyAnnotation(description = "This is a custom annotation")
public void myMethod() {
System.out.println("Method with custom annotation");
}
}
public class AnnotationExample {
public static void main(String[] args) throws Exception {
// মেথডের রিফ্লেকশন অবজেক্ট তৈরি
Method method = Example.class.getMethod("myMethod");
// মেথডের ওপর আনোটেশন চেক করা
if (method.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
System.out.println("Annotation description: " + annotation.description());
}
}
}
- Annotations হল Java-র একটি শক্তিশালী বৈশিষ্ট্য যা কোডের ওপর অতিরিক্ত তথ্য যোগ করতে ব্যবহৃত হয়।
- এটি কোডের রিডেবিলিটি, মেইনটেনেবিলিটি, এবং ডেভেলপমেন্ট প্রক্রিয়া সহজ করে তোলে।
- আনোটেশনগুলির মাধ্যমে আপনি কোডে কার্যকরী তথ্য প্রদান করতে পারেন এবং রানটাইম বা কম্পাইল টাইমে আচরণ নিয়ন্ত্রণ করতে পারেন।
- Reflection ব্যবহার করে আপনি রানটাইমে আনোটেশন অ্যাক্সেস করতে পারেন এবং কোডের কার্যকারিতা পরিবর্তন করতে পারেন।
Read more