【めんばへんすう】

メンバ変数 とは?

最終更新:
💡 クラスが「持っているデータ」を格納する変数

クラスなどの型に属する変数を指す言葉。JavaやC#のフィールドには、オブジェクトごとの値を持つものと、型に属して共有されるstaticのものがある。呼び方や扱いは言語によって異なる。

📌 このページのポイント
メンバ変数:どこに属する値?Dogクラス(設計図)static count = 2(共通)犬A犬Bname = ポチage = 3name = シロage = 5name・age:各インスタンスの値count:クラスに属する共有の値
JavaやC#のフィールドを例に、インスタンス変数とstaticフィールドを分けています。
ひよこ ひよこ
メンバ変数って何?
ペンギン先生 ペンギン先生
クラスなどに属する変数だよ。JavaやC#ではフィールドと呼ぶね。たとえば犬を表すオブジェクトなら、名前や年齢などの状態を保存できる。メソッドが処理を表すのに対し、こちらはデータを持つ部分だよ
ひよこ ひよこ
関数の中の変数とは違うの?
ペンギン先生 ペンギン先生
Javaなら、メソッドやブロックの中に宣言するのがローカル変数だよ。フィールドはオブジェクトやクラスに属し、必要な期間、状態を保持できる。どこから参照できるかは、privateなどのアクセス制御にも左右されるんだ
ひよこ ひよこ
犬が2匹いたら、同じ名前を共有するの?
ペンギン先生 ペンギン先生
名前がインスタンスフィールドなら、それぞれの犬に別の値を持たせられるよ。dog1の名前を変えても、dog2の名前が自動で変わるわけではない。一方、JavaやC#のstaticフィールドは型に属するので、各オブジェクトの名前とは別の共有データになるんだ
ひよこ ひよこ
プロパティやフィールドと同じ言葉?
ペンギン先生 ペンギン先生
言語を確認して使い分けよう。C#のフィールドは変数で、プロパティはgetやsetなどのアクセサーを使って値にアクセスする仕組みだよ。プロパティは計算した値を返すこともあり、単なる保存場所と同一ではないんだ
ひよこ ひよこ
全部publicにしておけば簡単じゃない?
ペンギン先生 ペンギン先生
外部から自由に書き換えられると、年齢に不適切な値を入れられるなど、状態を守りにくくなることがあるよ。必要に応じてフィールドを非公開にし、メソッドやプロパティで確認してから変更する。ただしsetterを付けただけで検証されるわけではなく、確認する処理や設計が必要なんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「メンバ変数」って出てきたら「オブジェクトやクラスが持つデータを保存する変数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Member Variable」 = メンバー(所属)変数
💬 クラスの「メンバー(所属するもの)」として定義された変数。メソッドもクラスのメンバーだが、特に変数の場合にメンバ変数という

参考資料

← 用語集にもどる