java開発で良く聞くsetter/getterについて
Javaを勉強したり、現場で技術者の話の中で
setter(セッター)、getter(ゲッター)
という言葉が良く使われていると思います。
今回は
- setter/getterの概要
- 実際のコード
- メリット
- 実際の現場での使われ方
- 存在意義
について、まとめてみました。
setter/getterとは
setter/getterとは
java開発者の中で広まった暗黙的なコード規約
です。
クラスの中の変数をセットする、取り出す専門のメソッドのことを言い。
変数をセットするだけのメソッドはsetterメソッド
変数を取り出すだけのメソッドはgetterメソッド
と言います。
結論からいうと、これだけ抑えて置けばもう後は現場で出てきたら思い出せばよいなのだけですが、色々と解説してみたいと思います。
実際のコード
書き方、命名規約、正確な解説は入門書籍などに譲りますが、
こんな書き方になっているのがsetter/getterです
public class sample {
private String name;
// これがGetterです。
public String getName() {
return name;
}
// これがSetterです。
public void setName(String c) {
this.name = c;
}
}
この場合は、
sampleクラス内のnameだけを取り出すメソッドがgetName
sampleクラス内のnameだけにセットするメソッドがsetName
です。
メリットは
ではsetterを使うメリットは何でしょう?
代表的なものを2つ上げます
- 読取/書込専用にできる
- コードチェックができる
読取/書込専用にできる
例えばさきほど紹介したsampleクラスのsetterを削除すると
読み取り専用にできます。
なので、もともと書き込む必要のない変数ならばこうしておくことで、
バグなどがでなくなります。
public class sample {
private String name;
// これがGetterです。
public String getName() {
return name;
}
}
コードチェックができる
特にsetterの場合に関してですが、セットするときに
コードチェックを実装することができます。
例えば、name変数にはnullはセットしたくない場合,
setterメソッドにnullチェックを入れることができます。
ここに実装しておくことで
クラス呼び出し側でチェックを実装する必要がなくなるわけです。
public class sample {
private String name;
// これがGetterです。
public String getName() {
return name;
}
// これがSetterです。
public void setName(String c) {
//ここにチェック処理を実装できる
if(c == null)
{
//例外エラーなどを返す
}
this.name = c;
}
}
setter/getterは規約なの?
このsetter/getter。
別にjavaの命令でもAPIでもなく
ただのコードの書き方の話です。
誰が決めたのでしょう?
なぜ広まったのでしょう?
どうやら主にjava開発者の中だけで広まっている暗黙の書き方のようで、
javaBeansというプログラムを作る際の命名規約が広まり
有名になったようです。
実際の例
では実際どうかという話に移ります。
私が職場で経験した例だと
実際は
フレームワークのjava同士の値の受け渡し用の受け皿
にしているような感じでした。
しかもその受け皿となるsetter/getterは自動生成のプログラムで作成し、単純なsetter/getterのみしか作れない上に、直接編集が原則禁止になっています。
先ほど紹介した
setterとgetterのメリット
1.読み取り専用、書き込み専用にできる
2.コードチェックができる
が実装できない規約になっているのです!
意味ねぇぇぇ
こんな現場だけではないと思います。
たまたま、私の現場が特殊だったのだと信じたいです。
存在意義は?
ここまで説明しましたが、私の現場での利用用途を考えると
存在意義が怪しいです。
メリットである
- 読み取り専用、書き込み専用にできる
- コードチェックができる
は私の現場では利用されていなかったし、
代替方法はいくらでもあるわけです。
結論としてsetter/getterの存在意義は
賛否両論なので気にしないようにしましょう。
というのが私の結論です。
こんなことを考えるくらいなら自分でコードを書いてプログラムをたくさん作っていった方が良いと考えます。
世界共通でsetter/getterが流行ったのは
そもそもこのsetter/getterという書き方は
javaが発明され、それに伴い、フレームワークは発明されたときに暗黙的に流行った書き方
だと解釈しています。なので、
俺は生粋のjavaマスターになるぜ!
と言う人、以外は
あまり深く理解する必要はないと思います。