singletonについて
SpringBootの動画学習で、singletonというプログラミング初心者には聞きなれない単語が出てきたのでsingletonについて調べてまとめてみました。
singletonとは?
singletonは、あるクラスのインスタンスが必ず一つであることを保証することを指します。
また、singletonはデザインパターンの一種です。
通常はインスタンス化する際、クラスオブジェクトが一つに対し、インスタンスオブジェクトは複数生成することが出来ます。
しかし、クラスオブジェクト一つに対し、一つのインスタンスのみを共有したい場合はsingletonを使用し他のインスタンスを生成できなくします。
singletonの多用には注意
singletonはデザインパターンの中でも比較的理解されやすい、容易に利用できることから多用されがちです。
しかし、多用しすぎるとクラス間の依存関係を不必要に強めてしまう恐れがあるため、singletonはどうしてもインスタンスを一つに制限しなくてはならない場合にのみ使用するようにしましょう。
Javaでのsingletonパターン使い方
singletonパターンを使用する際のポイントは。以下の二つです。
・コンストラクタをprivateで宣言する。
・singletonのインスタンスを使用するメソッドはstaticで宣言する。
それでは実際にsingletonを使用したコードを紹介したいと思います。
public class Sample {
//staticでクラスオブジェクトの中にインスタンスが生成される
private static Sample singleton = new Sample();
//他クラスでコンストラクタを使ってインスタンスを生成することを防ぐ
private Sample(){};
//インスタンス取得用のメソッド
public static Sample getInstance() {
return singleton;
}
}
privateでコンストラクタを宣言することで、前行のnew Sample()のインスタンス生成時以外にインスタンスを生成することが出来なくなります。
よって他のクラスでコンストラクタを使用しインスタンス化することを防ぎます。
そして、singletonのインスタンスは取得用のメソッドを追加することで取得できます(getInstance()メソッド)。
getInstance()メソッドはstaticで宣言しています。これにより、利用する側はSample.getInstance()でインスタンスを取得できます。
まとめ
singletonはデザインパターンの一種で、あるクラスのインスタンスが必ず一つであることを保証する際に使用します。
singletonパターンを使用する際の主なポイントは以下の二つです。
・コンストラクタをprivateで宣言する。
・singletonのインスタンスを使用するメソッドはstaticで宣言する。
上記のポイントを押さえれば、singletonは簡単に使用できますが、多用しすぎるとクラス間の依存関係を不必要に強めてしまう恐れがあるため使用時には注意が必要です。