PythonとJavaのstaticの違いと共通点をやさしく解説!クラスとインスタンスの違いがカギ!

こんにちは。ゆうせいです。

プログラミングを学んでいると、static(スタティック)というキーワードに出会います。

Javaではよく使うし、Pythonでも@staticmethodって見かけるけど…

「これって一体なんのためにあるの?」
「インスタンスメソッドと何が違うの?」

という方も多いと思います!

この記事では、JavaとPythonにおけるstaticの意味と使い方を初心者向けに徹底解説します。


h2: staticってそもそも何?

まずは考え方からおさえましょう。

staticとは、「インスタンスに属さない、クラスそのものに属する」という意味です。

例えるなら:

  • インスタンスメソッド:生徒1人1人が持つノート
  • staticメソッド:教室に貼られてる掲示板

つまり、インスタンスを作らなくても使えるのがstaticなものなんです!


Javaのstaticの使い方

Javaでは、次のように使います。

static変数(クラス変数)

public class Person {
    static int count = 0;

    public Person() {
        count++;
    }
}

  • Person.countでアクセス可能
  • すべてのインスタンスで共有

staticメソッド(クラスメソッド)

public class MathUtil {
    public static int square(int x) {
        return x * x;
    }
}

呼び出し方:

int result = MathUtil.square(5);  // 25

newしなくても呼び出せる! これが最大の特徴です。


Pythonのstaticな考え方

Pythonにはstaticというキーワードはありませんが、同じような役割をする仕組みがあります。

それが @staticmethod@classmethod です!

@staticmethod(静的メソッド)

class MathUtil:
    @staticmethod
    def square(x):
        return x * x

呼び出し方:

print(MathUtil.square(5))  # 25

  • インスタンスを作らずに呼び出せる
  • selfclsも受け取らない

@classmethod(クラスメソッド)

class Counter:
    count = 0

    @classmethod
    def increment(cls):
        cls.count += 1
  • clsはクラスそのものを受け取る
  • クラス変数を操作したいときに使う

h2: インスタンスメソッドとの違いを整理しよう!

種類Javaでの書き方Pythonでの書き方特徴
インスタンスメソッドpublic void greet()def greet(self):インスタンスを経由して呼ぶ
クラスメソッドpublic static void greet()@classmethod def greet(cls):クラスを受け取って動作
静的メソッドpublic static void greet()@staticmethod def greet():インスタンス・クラスを受け取らない

h2: よくある疑問とその答え!

h3: staticを使うメリットは?

  • 共通の機能をまとめられる
    • 例:数学関数、日付の処理など
  • インスタンス生成なしで使える
    • メモリ節約、構造がシンプル

h3: staticは多用してもいいの?

便利ですが、使いすぎはオブジェクト指向の考え方から外れるので注意!

  • 「その機能は本当にインスタンスに関係ない?」と考えてから使おう!

h2: まとめ

  • staticは、クラスに直接ひも付く属性やメソッドを定義するときに使う
  • Javaではキーワードで明示、Pythonでは@staticmethod@classmethodで実現
  • インスタンスを作らずに呼び出せるのが特徴
  • 共通処理の整理やクラス設計のメリハリに役立つ!

h2: 次のステップ!

このあと学ぶとより理解が深まります!

  • Pythonのclassmethodstaticmethodの使い分け
  • Javaのstaticとインスタンスのライフサイクル
  • シングルトンパターンなど、staticを使ったデザインパターン
  • ユーティリティクラスの設計と活用

「クラスの設計が苦手」「staticと継承の関係がよくわからない」など、気になるところがあれば何でも聞いてください!じっくり丁寧に解説します!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。