getterとsetter
クラスのフィールドを外部から直接アクセスできないようにした場合、フィールドの値を取得したり変更したりするためのメソッドを用意します。これらのメソッドを getter と setter と呼びます。setter を用意することで、フィールドの値を変更するときに、その値が適切かどうかをチェックすることができます。ここではオブジェクト指向における getter と setter の使い方について解説します。
getterとsetterとは
クラスのフィールドにはアクセス修飾子の private を付けて外部から直接アクセスできないようにすることが推奨されます。外部からアクセスできないので、フィールドの値を取得したり変更したりするには、クラス内で用意したメソッドを通して行います。
フィールドの値を取得するためのメソッドを getter、フィールドの値を設定するためのメソッドを setter と呼びます。
getter : フィールドの値を取得するメソッド setter : フィールドの値を設定するメソッド
getter や setter を使用して、外部から直接アクセスできないフィールドの値を取得したり変更したりすることができます。
getterとsetterの例
次のクラスでは price フィールドに private を付けて、外部から直接アクセスできないようにしています。
class Product {
private int price;
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
この price フィールドの値を取得するために用意されているのが setPrice メソッドと getPrice メソッドです。 setPrice メソッドは price フィールドの値を変更するためのメソッドですので setter です。 getPrice メソッドは price フィールドの値を取得するためのメソッドですので getter です。
getter と setter のメソッドは外部から呼び出せる必要がありますので、どちらもアクセス修飾子として public が設定されています。
なお getter だけ用意して setter を用意しなかった場合は、読み取り専用のフィールドとなります。
getterとsetterを使う理由
フィールドを直接変更できるようにしてしまうと、意図しない値が設定されてしまう可能性があります。例えば負の値が設定されることを想定していないフィールドに対して、負の値を設定することができてしまいます。
Product p = new Product(); p.price = -100;
直接フィールドに値を設定できないようにした上で、フィールドの値を変更するための setter を用意することで、 setter のところで不正な値のチェックを行うことができます。下記では setPrice メソッドの中で変更する値が負の値ではないかどうかチェックを行っています。
class Product {
private int price;
public void setPrice(int price) {
if (price >= 0) {
this.price = price;
}
}
public int getPrice() {
return price;
}
}
このように setter の中で値のチェックを行うことで、不正な値が設定されることを防ぐことができます。
なお getter の方は基本的にフィールドの値を返すだけの場合が多いですが、フィールドが外部から直接アクセスできなくなっていますので、フィールドの値を取得するには getter を必ず用意する必要があります。
getterとsetterの名前の付け方
getter と setter の名前は次のような規則で付けることが一般的です。フィールド名の先頭文字は大文字にしてください。
getter : get + フィールド名 setter : set + フィールド名
例えば price というフィールドに対する getter と setter を定義する場合、メソッド名は次のようになります。
getPrice() setPrice()
このような名前の付け方は Java で広く使われている慣習となっています。
boolean型のフィールドに対するgetter
フィールドのデータ型が boolean 型だった場合、 getter の名前は「get + フィールド名」ではなく「is + フィールド名」を使用するのが一般的です。
次の例では boolean 型のフィールドに対して getter と setter を定義しています。
class User {
private boolean active;
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
このとき getter の名前は getActive ではなく isActive を使用するのが一般的です。
なお setter については boolean 型の場合であっても「set + フィールド名」が使用されます。
-- --
オブジェクト指向における getter と setter の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。