なぜ「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回