質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

Q&A

1回答

981閲覧

グローバル変数とシングルトン

HogeAnimalLover

総合スコア4830

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

0グッド

0クリップ

投稿2019/04/09 15:06

シングルトンはグローバル変数の性質を持つため望ましくない

と、よく言われますが、そこまでのものでしょうか?

静的変数という共通点がありますので、ライフサイクル的には同一と考えることができますが、スコープやユーザ定義語の観点では同一とは言えないはずです。というのも、名前空間で区切ることで影響範囲を狭めることができるからです。グローバル変数が嫌われる理由は広大なスコープにありますので、シングルトンはこれと同等視するほどではないと思います。また、同等とするならば、静的関数内の静的変数すべてにも同じことが言えることになると思います。

シングルトンを嫌われる理由についてご意見ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2019/04/09 23:40

「性質を持つ」と「同等」・「同一」とは、同じ意味ではないと思います。 『よく言われます』が、誰が、どういう文脈において、どのような意図をもって、といった事を共有できなていない者(このサイトの質問者と閲覧者)の間で意思疎通できていると考えるのは難しいのではないでしょうか。
guest

回答1

0

シングルトンが完全な悪だとは思いません
悪なら言語の仕組みとして用いられることはありません
例えばJavaのenumはシングルトンですし、String#intern()もその考えです
クラスオブジェクト(例えばString.classで得られる、各クラスに対するClassオブジェクト)だってシングルトンです
JavaEEやSpringのアノテーションに@Singletonもあるくらいです

というのも、名前空間で区切ることで影響範囲を狭めることができるからです。

この考えで設計、実装できる人だけが集まったコミュニティ、チームであれば問題ありません
ミュータブルな設計にした時の問題点を理解しているでしょう
スレッドアンセーフな実装にした時の問題点を理解しているでしょう
テストのしにくさよりも、オブジェクトを一つだけにすることに価値があることに納得できるなら利用することに何ら問題ありません

ただ残念ながら多くのコミュニティやチームはそんな理想なメンバーだけで構成されません
時間が経つにつれ、グローバル変数とシングルトンで実現したかったことの違いが曖昧になっていきます
だから望ましくないのです

投稿2022/11/22 02:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問