Javaでクラスをシングルトンにする方法とは?基本の実装パターンを解説
シングルトン(Singleton)クラスとは、そのクラスのインスタンス(オブジェクト)がプログラム内に1つしか存在しないことを保証するクラスです。つまり、クラスのインスタンス化は一度だけ行われることになります。
シングルトンを実現するためには、まずクラスのコンストラクタをprivateとして宣言します。これにより、クラス外部からnewキーワードでオブジェクトを自由に生成できなくなり、オブジェクト生成の範囲がクラス内部に限定されます。
次に、生成した唯一のインスタンスを返すためのstaticメソッドを用意します。このメソッドを経由してインスタンスを取得することで、オブジェクトの生成処理をクラス自身の中で管理できます。さらに、staticブロック(静的初期化ブロック)を使ってオブジェクトを生成する方法も一般的です。staticブロックはクラスがロードされたタイミングで一度だけ実行されるため、シングルトンの初期化に適しています。
シングルトン実装のポイント
- コンストラクタをprivateにする:外部からのインスタンス生成を防止する
- staticフィールドに唯一のインスタンスを保持する
- staticメソッドでインスタンスを返す:外部からはこのメソッド経由でのみアクセス可能にする
- staticブロックで初期化する:クラスロード時に一度だけオブジェクトを生成する
コード例
public class SingletonClassTest {
private static SingletonClassTest obj;
static {
obj = new SingletonClassTest(); // staticブロック内でオブジェクトを生成
}
private SingletonClassTest() { } // コンストラクタをprivateとして宣言
public static SingletonClassTest getObject() {
return obj;
}
public void print() {
System.out.println("Singleton Class Test");
}
public static void main(String[] args) {
SingletonClassTest test = getObject();
test.print();
}
}
実行結果
Singleton Class Test
コードの解説
この例では、staticブロック内でSingletonClassTestのインスタンスを生成し、staticフィールドobjに保持しています。mainメソッドではgetObject()メソッドを呼び出してインスタンスを取得し、print()メソッドを実行しています。
getObject()を何度呼び出しても、常に同じインスタンスが返されるため、プログラム全体で単一のオブジェクトが共有されることになります。これがシングルトンパターンの基本的な仕組みです。設定情報の管理やログ出力など、アプリケーション内で共通の状態を持たせたい場面でよく活用されます。
-
Javaのstaticキーワードとは?メソッド・変数・ブロックの使い方を徹底解説
Javaのstaticキーワードの使い方Javaでクラスを扱う際、通常はクラスのインスタンスを生成してから、そのメンバーにアクセスする必要があります。しかし、インスタンスを生成せずにクラスメンバーを定義したい場面もあります。そんなときに役立つのが、Javaのstaticキーワードです。staticキーワードを使用すると、インスタンスを生成しなくてもアクセスできるクラスメンバーを定義できます。この記事では、具体例を交えながら、staticキーワードの基本と、Javaプログラムでの実践的な使い方を解説します。JavaのクラスとはJavaにおいて、クラスはオブジェクトの設計図です。例えば、Order
-
Androidでシングルトンクラスを使う方法をサンプルコード付きで解説
シングルトンデザインパターンとは?実装例に入る前に、まず「シングルトンデザインパターン」についておさらいしておきましょう。シングルトン(Singleton)とは、あるクラスのインスタンス生成をアプリケーション全体で1つだけに制限するデザインパターンです。主な用途としては、同時実行(並行処理)の制御や、アプリケーションがデータストアへアクセスするための中心的なアクセスポイントの作成などが挙げられます。この記事では、Androidアプリでシングルトンクラスを実際に使う方法を、ステップごとのサンプルコードとともに解説します。手順1:新規プロジェクトを作成するAndroid StudioでFile →