Class "static" Member in OOP

AL HasibAL Hasib
4 min read

প্রোগ্রামিং-এর জগতে, ডেটা এবং ফাংশনগুলো কীভাবে মেমোরিতে রাখা হবে, তার উপর আমাদের কোডের কার্যকারিতা, speed এবং মেমোরি usage অনেকাংশে নির্ভর করে। এমন অনেক সময় আসে যখন আমরা চাই কিছু ডেটা বা ফাংশন যেনো কোনো নির্দিষ্ট ক্লাসের সব অবজেক্টের জন্য একটাই কপি থাকে, বারবার আলাদা করে তৈরি না হয়। আর এই প্রয়োজন মেটাতে প্রোগ্রামিংয়ে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা রাখে static কীওয়ার্ড।

static কীওয়ার্ড ব্যবহার করে আপনি ক্লাস-লেভেল মেম্বার তৈরি করতে পারেন। এর মানে হলো, সেগুলো কোনো নির্দিষ্ট অবজেক্টের সাথে যুক্ত থাকে না, বরং পুরো ক্লাসের সাথেই যুক্ত থাকে। এর ফলে, ক্লাসটি মেমোরিতে লোড হওয়ার সময়ই এই static মেম্বারগুলো তৈরি হয়ে যায় এবং সব অবজেক্ট সেগুলোকে শেয়ার করতে পারে।

static কীওয়ার্ডের তিনটি প্রধান ব্যবহার নিচে বিস্তারিতভাবে আলোচনা করা হলো।


১. Static Variable: শেয়ার করা ডেটা, বাঁচানো মেমোরি

একটি static variable হলো ক্লাস-লেভেল ভেরিয়েবল। এটি কোনো অবজেক্টের অংশ নয়, বরং ক্লাসটি মেমোরিতে লোড হওয়ার সাথে সাথেই এর জন্ম হয় এবং এটি একটাই কপি হিসেবে class এর মধ্যে থেকে যায়। এর ফলে, ওই ক্লাসের যতগুলোই অবজেক্ট তৈরি হোক না কেন, সবাই এই একই ভেরিয়েবল শেয়ার করে করতে পারে।

উদাহরণ:

ধরুন, আপনি একটি Counter ক্লাস তৈরি করছেন যা মোট কতগুলো অবজেক্ট তৈরি হয়েছে তা গণনা করবে।

class Counter {
  static int count = 0;

  Counter() {
    count++;
  }
}

এখানে count ভেরিয়েবলটি static হওয়ায় এটি মাত্র একবারই তৈরি হবে। তাই, যখনই আপনি Counter ক্লাসের নতুন একটি অবজেক্ট তৈরি করবেন, count এর মান সবার জন্য একই থাকবে এবং আপডেট হতে থাকবে।

কেন এটি গুরুত্বপূর্ণ?

  • শেয়ারড ডেটা: যখন আপনার এমন কোনো ডেটা রাখার দরকার হয় যা সব অবজেক্টের জন্য একই, যেমন—মোট অবজেক্টের সংখ্যা, গ্লোবাল কনফিগারেশন সেটিংস বা একটি সাধারণ ফ্যাক্টর, তখন static ভেরিয়েবল খুবই কার্যকর।

  • মেমোরি সাশ্রয়: প্রতিটি অবজেক্টের জন্য আলাদা করে মেমোরি বরাদ্দ না হওয়ায় মেমোরি অনেক সাশ্রয় হয়।

যদি আপনি static ব্যবহার না করতেন, তাহলে প্রতিটি অবজেক্টের জন্য count এর আলাদা কপি তৈরি হতো এবং আপনি সঠিকভাবে মোট সংখ্যাটি গণনা করতে পারতেন না।


২. Static Method: অবজেক্ট ছাড়াই সরাসরি অ্যাক্সেস

একটি static method হলো এমন একটি ফাংশন যা কোনো অবজেক্টের সাথে সম্পর্কিত নয়। আপনি এই মেথডটিকে সরাসরি ক্লাসের নাম দিয়ে কল করতে পারেন, নতুন করে কোনো অবজেক্ট তৈরি করার প্রয়োজন পড়ে না।

উদাহরণ:

class MathUtils {
  static int square(int x) {
    return x * x;
  }
}

আপনি এই square মেথডটি ব্যবহার করতে চাইলে শুধু MathUtils.square(5); লিখলেই হবে। এর জন্য MathUtils ক্লাসের কোনো অবজেক্ট বানানোর দরকার নেই।

কেন এটি গুরুত্বপূর্ণ?

  • ইউটিলিটি ফাংশন: এই মেথডগুলো সাধারণত এমন কাজের জন্য ব্যবহার করা হয় যা কোনো নির্দিষ্ট অবজেক্টের অবস্থার ওপর নির্ভরশীল নয়। যেমন—বিভিন্ন ধরনের গাণিতিক গণনা বা কোনো ডেটা প্রক্রিয়াকরণের কাজ।

  • দ্রুত অ্যাক্সেস: অবজেক্ট তৈরি করার ঝামেলা না থাকায় কোড দ্রুত কাজ করে এবং কোডের রিডেবিলিটি অনেক বেড়ে যায়।


৩. Static Block: ক্লাস লোডিংয়ের সময়ই প্রাথমিক সেটআপ

একটি static block হলো এমন একটি কোড ব্লক যা ক্লাসটি মেমোরিতে লোড হওয়ার সাথে সাথেই মাত্র একবার রান হয়। এটি সাধারণত static ভেরিয়েবলগুলোকে জটিল উপায়ে ইনিশিয়ালাইজ করার জন্য ব্যবহৃত হয়।

উদাহরণ:

ধরুন, আপনার একটি কনফিগারেশন ক্লাসে ডেটাবেসের URL রাখা আছে।

class Config {
  static String DB_URL;

  static {
    DB_URL = "jdbc:mysql://localhost:3306/mydb";
    System.out.println("Config Loaded");
  }
}

যখনই Config ক্লাসটি প্রথমবার ব্যবহার হবে (হোক সেটা কোনো অবজেক্ট তৈরি করা বা কোনো static মেম্বার কল করা), এই static ব্লকটি স্বয়ংক্রিয়ভাবে রান হবে এবং DB_URL ভেরিয়েবলটি ইনিশিয়ালাইজ করবে।

কেন এটি গুরুত্বপূর্ণ?

  • কমপ্লেক্স ইনিশিয়ালাইজেশন: যখন কোনো static ভেরিয়েবলের মান সরাসরি দেওয়া সম্ভব নয় এবং এর জন্য কিছু লজিক বা জটিল গণনার প্রয়োজন হয়, তখন static ব্লক ব্যবহার করা হয়।

  • ফিক্সড সেটআপ: এটি ক্লাসের জন্য প্রয়োজনীয় একবারের সেটআপ বা কনফিগারেশন লোড করার জন্য খুব কার্যকর।


সংক্ষেপে static ব্যবহারের সুবিধা

  • মেমোরি সাশ্রয়: একই ডেটার বারবার কপি তৈরি হয় না, ফলে মেমরি সেভ হয়।

  • সহজে ডেটা শেয়ার: একাধিক অবজেক্টের মধ্যে ডেটা সহজেই শেয়ার করা যায়।

  • দ্রুত অ্যাক্সেস: অবজেক্ট তৈরি করার দরকার হয় না। সরাসরি ক্লাসের সাথেই কর করা যায়।

  • সংগঠিত কোড: ইউটিলিটি ফাংশন এবং ইনিশিয়ালাইজেশন লজিকগুলোকে একই জায়গায় রাখা যায়।

যখন static ব্যবহার করা ঠিক নয

  • যদি কোনো ডেটা বা মেথড কোনো নির্দিষ্ট অবজেক্টের অবস্থার ওপর নির্ভরশীল হয়, তখন static ব্যবহার করা উচিত নয়।

  • মাল্টিথ্রেডিং পরিবেশে শেয়ারড static ডেটা সিঙ্ক্রোনাইজ করা না হলে ডেটা করাপশন বা ডেটা নষ্ট হওয়ার ঝুঁকি থাকে। তাই এ বিষয়ে সতর্ক থাকতে হবে।

static কীওয়ার্ড প্রোগ্রামিং-এ একটি শক্তিশালী হাতিয়ার। এটি কোডের কাঠামোকে আরও সুসংগঠিত করে, মেমোরি ব্যবহার অপটিমাইজ করে এবং কিছু বিশেষ কাজকে অনেক সহজ করে তোলে। তাই, এর সঠিক ব্যবহার আপনার কোডকে আরও উন্নত করতে সাহায্য করবে।

0
Subscribe to my newsletter

Read articles from AL Hasib directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

AL Hasib
AL Hasib