ゲッターとセッター
Javaオブジェクトのフィールドに値を設定(セット)するメソッドがセッター。
その値を取得(ゲット)する値がゲッター。
基本
慣習として以下のような名前、引数、戻り値になっている。
メソッド名 | 引数 | 戻り値 | |
---|---|---|---|
ゲッター | getXXX() | 引数なし | フィールドの値 |
セッター | setXXX() | 引数一つ | void型 |
ゲッター
その前にまず、カプセル化について
プログラムを形成するオブジェクトについて、その中身を他のオブジェクトからなるべく見えなくすること。
他のクラスからそのフィールドにアクセス出来なくするために、フィールドを全てprivateにすることがカプセル化の原則。
private 型名 フィールド名();
カプセル化でprivateにしたフィールドは他のクラスから直接アクセスできない。
アクセスする必要があるときのために間接的にアクセスできる手段を用意する。
具体的には、間接的にアクセスするための以下のようなメソッドを用意する。
戻り値の型 メソッド名(){
return フィールド名;
}
このメソッドはただフィールドの値をreturnで返すだけのメソッドとなっている。
そのため、戻り値の型はフィールドの型と同じになる。
例えば、
private int piyo;
に対しては
public int getPiyo(){
return piyo;
}
となる。
他のクラス内で「getPiyo()」メソッドを呼び出すことにより、privateにした
int型のフィールド「piyo」の値を取得できるようになる。
要するに、ゲッターを他のクラスから呼ぶことによって、戻り値としてprivateなフィールドの値をゲットする。
これがゲッター。
こうすると、フィールドの名前や値の取得ロジックに変更があっても、「getPiyo()」メソッドの
中を書き換えるだけで済む。
また、「getPiyo()」メソッドを使っているほかのクラスの書き換えは一切行わなくて良いというメリットもある。
セッター
ゲッターにより、privateなフィールドの値をゲットできることが分かった。
しかし、ゲッターはただフィールドの値をreturnで返すだけのメソッドのため、フィールドの値を書き換えることができない。
その値を書き換えるためのメソッドがセッターである。
一般的には以下のメソッドを用意する。
戻り値の型 メソッド名(引数){
フィールド名 = 引数;
}
このメソッドはフィールドに入力したい値を引数として受け取り、メソッド内でフィールドに代入しているだけなので、引数の型はフィールドと同じになる。
例えば
private int hoge;
に対しては
public void setPiyo(int piyo){
piyo = hoge;
}
となる。
これはただフィールド「piyo」に引数で受け取った値「hoge」を代入しているだけである。
ゲッターと同様に、こうすることで何か変更があったとしてもクラス内の「setPiyo()」メソッドの
中を書き換えるだけで済む。
また、「serPiyo()」メソッドを使っているほかのクラスの書き換えは一切行わなくて良いというメリットもある。
アクセサメソッド
セッターやゲッターのようにpravateで隠ぺいしたフィールドへ間接的にアクセスするために用意したメソッドをアクセサメソッドと呼ぶ。
アクセサメソッドを用いてフィールドにアクセスすることで、クラス間の依存性を低め、追加・変更の作業を楽にし、自由度を高めることができる。