Java - メンバ変数とメンバメソッド

メンバ変数とメンバメソッド

メンバ変数とは、クラスの中に定義されている変数のことです。

class Calculator{
  int num;
}
メンバ変数とメンバメソッド

メンバ変数はメソッドの外部に定義されているため、すべてのメソッドからメンバ変数に対してアクセスできます。メンバ変数は、クラスからオブジェクトが生成されたときに作成され、オブジェクトが破棄されるまで値は保持されます。また、変数の値はオブジェクト毎に確保されます。

メンバ変数に値を格納するには、下記のように記述します。下記のサンプルコードでは、Calculator クラスからオブジェクトを生成し、そのオブジェクトからメンバ変数に値を格納しています。

class CalculatorTest{
  public static void main(String args[]){
    Calculator calc = new Calculator();
    calc.num = 10;
  }
}

class Calculator{
  int num;
}
メンバ変数とメンバメソッド

ただし、上記の方法は一般的な記述方法ではありません。なぜならチームで開発を行う場合、利用するクラスが他の人が作成することがあります。その場合、予期しない値を直接格納してしまうと、プログラムが動かなくなる可能性があるためです。

そのため、メンバ変数の取得と設定は、get と set のメソッドを用意して行う記述が一般的です。以下のサンプルコードでは、メンバ変数に対してメソッドを経由して取得と設定を行っています。このような書き方にすることで、予期しない値が設定されても条件分岐などで弾くことができるため、整合性を担保することができます。

class CalculatorTest{
  public static void main(String args[]){
    Calculator calc = new Calculator();
    calc.setNum(10);
    int num = calc.getNum();
    System.out.println(num); // 10
  }
}

class Calculator{
  int num;
  
  // 設定値を 10 しか許容しない
  void setNum(int n){
    if(n == 10){
      num = n;
    } else {
      num = 0;
    }
  }
  
  int getNum(){
    return num;
  }
}
メンバ変数とメンバメソッド

しかし、上記のサンプルコードでは、まだ直接メンバ変数に値を格納できてしまいます。直接メンバ変数に値を格納することを禁止するには、メンバ変数に private を付与します。

class Calculator{
  private int num;
}
メンバ変数とメンバメソッド

private が付与されたメンバ変数は、クラス内でしかアクセスすることができません。直接メンバ変数に値を格納することができなくなるため、メンバ変数を扱う場合はメソッドを経由してのみアクセスすることが可能になります。

private の他にも public や protected があります。これらはアクセス修飾子と呼ばれ、クラス・メンバ変数・メソッドについて、他クラスへの公開範囲を決める修飾子を意味します。private を省略した場合は、public となります。

関連記事