【めんばへんすう】

メンバ変数 とは?

💡 クラスが「持っているデータ」を格納する変数
📌 このページのポイント
メンバ変数 ― クラス内の変数 class Dog name : string = "ポチ" age : number = 3 breed : string = "柴犬" ↑ メンバ変数(属性) bark() : "ワンワン!" eat() : "もぐもぐ" インスタンス dog1 name = "ポチ" age = 3 breed = "柴犬" インスタンス dog2 name = "ハチ" age = 5 breed = "秋田犬" 生成
メンバ変数のイメージ
ひよこ ひよこ

メンバ変数って何?

ペンギン先生 ペンギン先生

クラスに定義された変数で、そのクラスのオブジェクトが持つデータを格納するもの。「犬クラス」なら「name(名前)」「age(年齢)」「breed(犬種)」がメンバ変数。

ひよこ ひよこ

普通の変数と何が違うの?

ペンギン先生 ペンギン先生

スコープ(使える範囲)が違う。普通の変数(ローカル変数)は関数内だけで使える。メンバ変数はクラス全体で使えて、メソッドをまたいで参照・変更できる。オブジェクトの「状態」を保持するのがメンバ変数の役割。

ひよこ ひよこ

プロパティとフィールドとは同じ?

ペンギン先生 ペンギン先生

ほぼ同じ概念で文脈・言語によって使い分ける。C#ではフィールド(直接アクセスする変数)とプロパティ(getter/setterがある変数)を区別する。JavaC++ではメンバ変数・インスタンス変数・フィールドがほぼ同義で使われる。

ひよこ ひよこ

メンバ変数を全部publicにしちゃダメなの?

ペンギン先生 ペンギン先生

動くけど設計としてはよくない。外部から自由に変更できると、想定外の値が入ってバグになりやすいんだ。例えばageに-100が入るとか。だからprivateにしてsetter経由でバリデーションを入れるのが基本だよ。

ひよこ ひよこ

staticなメンバ変数ってどういうときに使うの?

ペンギン先生 ペンギン先生

インスタンスで共有したい値に使うよ。例えば「生成されたインスタンスの数をカウントする」場合、staticなcount変数を用意してコンストラクタで+1する。ただしstatic変数はグローバル状態になるから、マルチスレッド環境では競合に注意が必要だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
メンバ変数って出てきたら「クラスが持つデータを格納する変数、インスタンスごとに独立した値を持つ」と思えばOK!
📖 おまけ:英語の意味
「Member Variable」 = メンバー(所属)変数
💬 クラスの「メンバー(所属するもの)」として定義された変数。メソッドもクラスのメンバーだが、特に変数の場合にメンバ変数という
← 用語集にもどる