プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

Singletonとスタティックの違い

1つしかないものを表現するときSingletonでもスタティックなフィールドとして表現するのも同じ気がする。なにが違うのか調べてみた。


継承の可否

  • スタティックなものは継承できない。
  • Singletonは継承できる。

継承できる方が将来の拡張性が高い。


保証/強制の有無

  • スタティックフィールドでは2つ目が作られないことを保証/強制することはできない。
  • 1つしか作成できないことを保証/強制するのがSingleton。2つ目を作成しようとするとエラーがでる。

不変

オブジェクトの状態が更新されるようなクラスはSingletonにしない。更新するときにマルチスレッド環境ではsynchronizedが必要になり性能が劣化してしまうから。リソースが単一で不変なオブジェクトに対してのみSingletonを検討する。

これはSingletonとスタティックの差というよりSingletonの注意点か?


Singletonは「システムに1つしかないことを保証するもの」。Staticは「クラスに1つしかないもの」。粒度が違うから目的も異なる。