インスタンス変数 (instance variable) とは、Smalltalk等のオブジェクト指向言語において、オブジェクトのインスタンスごとに割り当てられた変数のことである。フィールド (field)、データメンバ (data member)、メンバ変数 (member variable) とも呼ばれる。それに対してクラス変数は、同じクラスに対する全てのインスタンスが同じ値を共有する。

インスタンス変数は、インスタンスフィールド (instance field) あるいは、略して「フィールド」と呼ぶこともある (本来、この「フィールド」の意味には、「クラス変数」も含まれるが、プログラミング言語によってはインスタンス変数のことを「フィールド」と呼び、クラス変数とは名前を区別しているものもある)。UMLではインスタンス変数のことを属性 (attribute) とも呼ぶ。

Javaのクラスを用いた例を示す。

上記の例において、barはクラスFooのインスタンス変数である。それに対して、bazはクラス変数である。 以下のプログラムで、Fooクラスを用いてクラス変数とインスタンス変数の違いを示す。

プログラム例:

実行結果:

foo1.bar=foo1.bar foo1.baz=foo2.baz
foo2.bar=foo2.bar foo2.baz=foo2.baz

上記のプログラムにおいて、foo1.bazとfoo2.bazはFooクラスのクラス変数を表している。 つまり、foo1.bazとfoo2.bazが表しているインスタンスは同一である。 そのため、結果として出力されるfoo1.bazとfoo2.bazの値は同じとなる。 逆に、foo1.barとfoo2.barはインスタンス変数であり、独立した変数である。 そのため、結果として出力されるfoo1.barとfoo2.barは異なった値となる。

関連項目

  • クラス (コンピュータ)
  • メソッド (計算機科学)
  • フィールド (計算機科学)
  • クラス変数
  • オブジェクト指向プログラミング
  • プロパティ
  • 属性

Rubyでのクラス変数、インスタンス変数、クラスインスタンス変数の違いについて simanのブログ

インスタンス変数について

インスタンスとは?超初心者のJava勉強|Programmer Life

Pythonのクラス変数とインスタンス変数の違い logging.info(self)

【Ruby】インスタンス変数の使い方を7つのステップで学ぼう Japanシーモア