ゲッターとセッターは、特にクラスを作成するときにデータを保護するために使用されます。
インスタンス変数ごとに、getterメソッドはその値を返し、setterメソッドはその値を設定または更新します。これを考えると、ゲッターとセッターはそれぞれアクセサーとミューテーターとしても知られています。
慣例により、ゲッターは「get」という単語で始まり、セッターは「set」という単語で始まり、その後に変数名が続きます。どちらの場合も、変数名の最初の文字は大文字になります。
public class Vehicle { private String color; // Getter public String getColor() { return color; } // Setter public void setColor(String c) { this.color = c; } }
getterメソッドは、属性の値を返します。setterメソッドはパラメーターを受け取り、それを属性に割り当てます。
ゲッターとセッターが定義されたら、メインでそれを使用します。
public static void main(String[] args) { Vehicle v1 = new Vehicle(); v1.setColor("Red"); System.out.println(v1.getColor()); } // Outputs "Red"
ゲッターとセッターを使用すると、値を制御できます。実際に値を設定する前に、セッターで指定された値を検証できます。
なぜゲッターとセッターを使用するのですか?
ゲッターとセッターを使用すると、コード内で重要な変数にアクセスして更新する方法を制御できます。たとえば、次のセッターメソッドについて考えてみます。
public void setNumber(int number) { if (number 10) { throw new IllegalArgumentException(); } this.number = num; }
このsetNumber
メソッドを使用することで、の値number
が常に1から10の間であることを確認できます。これは、number
変数を直接更新するよりもはるかに優れています。
obj.number = 13;
number
直接更新すると、コードのどこかで意図しない副作用が発生する可能性があります。ここで、number
13に設定すると、確立したい1から10の制約に違反します。
number
プライベート変数を作成してsetNumber
メソッドを使用すると、これが発生するのを防ぐことができます。
一方、の値を読み取る唯一の方法number
は、getterメソッドを使用することです。
public int getNumber() { return this.number; }