なぜ「static地獄」が起きるのか?
オブジェクト指向を学び始めた頃、よく起きる現象があります。
それが――
「全部staticにしてしまう問題」
です。
今日はこれをはっきり整理します。
目次
まず static とは?
簡単に言うと、
インスタンスを作らなくても使えるもの
です。
例えば:
Console.WriteLine("Hello");
Consoleはstaticクラスです。
だから new しなくても使えます。
便利ですよね。
ではなぜ地獄になるのか?
便利だからです。
初学者がやりがちなこと
class Player
{
public static int Hp;
public static void TakeDamage(int damage)
{
Hp -= damage;
}
}
これで動きます。
しかし問題はここです。
問題① プレイヤーが1人しか存在できない
staticにすると、
- 全プレイヤーでHpが共有されます
つまり:
- p1のHPも
- p2のHPも
- 全部同じ
になります。
これではゲームが作れません。
問題② 責任が曖昧になる
staticを使いすぎると、
- どこからでもアクセスできる
- どこからでも変更できる
- 影響範囲が分からない
結果:
バグが追えない
問題③ 設計を考えなくなる
staticは、
「どこに置くか」を考えなくても使えます。
つまり、
オブジェクト指向の思考をスキップできてしまう。
これが最大の問題です。
なぜ使いたくなるのか?
理由は単純です。
- new が面倒
- インスタンスの意味がまだ曖昧
- とりあえず動かしたい
でもそれは、
練習用の補助輪を外さずに自転車に乗っている状態です。
正しい使い分け
staticが向いているもの
- 計算だけするメソッド
- 共通の設定値
- ユーティリティ機能
例:
Math.Max(a, b);
これは個別の実体が不要です。
staticにしてはいけないもの
- プレイヤーのHP
- 敵の状態
- 個別に存在するもの
これらは必ずインスタンスに持たせます。
本質的な違い
staticは:
「世界に1つしかないもの」
インスタンスは:
「複数存在できるもの」
この感覚を持てると、
static地獄から抜け出せます。
Unityとの関係
Unityでstaticを多用すると:
- シーンをまたぐと壊れる
- 依存関係が見えなくなる
- テストできなくなる
だから設計が崩れます。
まとめ
static地獄が起きる理由は:
✔ 便利だから
✔ 設計を考えなくて済むから
✔ とりあえず動くから
でもその代償は、
拡張できないコードです。
最後に
今の段階では、
- 原則:staticは最小限
- 基本:まずはインスタンスで考える
これで十分です。
訪問数 6 回, 今日の訪問数 6回




ディスカッション
コメント一覧
まだ、コメントがありません