getterとsetterなるものに出くわしたから、今回はこの2つの使い方について見ていく。
getterとsetterとは?
getter
「get」というワードを使用したメソッドで、「return」を使って変数の値を返すもの
※voidを使わない
setter
「set」というワードを使用したメソッドで、値を設定するもの
privateと設定されているデータを別のクラスからでも使えるようにする

文字だけだと「なんのこっちゃ。」って感じだから後でコードと一緒に理解していくことにする。
いつgetterとsetterを使うの?
getterとsetterを使う時は、変数などのデータが「private」になっているとき。
「private」はアクセス修飾子と呼ばれるもので、同じクラス内でしかデータを参照することはできない。
もし別のクラスファイルに「String name;」などの参照したいデータがあるとする。
そのデータが「private」に設定されていたら、オブジェクトを作ったりしても使うことはできない。

使おうとしてもクラスが違うからエラー。
「private」などでアクセス制限がされているデータを参照したいときに使う。
なお、作ったgetterとsetterは「public」となり、どのクラスからでも使用することができるようになる。

後でちゃんとコードで確認する。
使い方
getterとsetterを使う時には以下のルールがある
- メソッドの名前は「get」もしくは「set」で始める
- 参照したいデータの変数名を先頭文字のみ大文字にして「get」もしくは「set」に続ける
- 「get」は{}内はreturnを使って値をgetメソッドの()内に返す
- 「set」は()内に新たな変数名を設定し、その変数がprivateのデータを持つようにする
- キーワード「this」を使い、その後ろにprivateの変数名を続ける
- 新たに設定した変数名を「=」で繋ぐ

文字ばっかりで分かんないよ。
実際にコードを見てみる
まず新しく「GetterSetter」という名前のクラスファイルを作って、適当に「private」を使ってコードを書いてみた。
public class GetterSetter {
private int age;
}
このままだとほかのクラスから情報を使えない。
情報を使えるようにするために、まず新しい変数を作ってprivateになっている「int age」の情報を割り当てる。
ということで「set」を使う。
- 他のクラスからでもアクセスできるようにしたいから「public」を使用
- returnといった戻り値は使わないから「void」を使用
- 変数名を書くときは、まずsetと書いて続けて頭文字が大文字の変数名を書く(setAge)
- ()内には、新しい変数の型と変数名を記入
変数の型は、参照したいprivateデータの型と一緒のもの(今回はint) - {}内にはprivateになっているデータをどこに入れるのかを設定
今回は変数Aを作って、Aの中に入れることにする
続けて書くと以下のようになる
public void setAge(int A) {
this.age=A;
}

今回の使い方に限っては、thisなくて「age=A」だけでも大丈夫みたいだった。
ただ、値を設定しただけでは、まだデータは使えない。
setterはあくまでもほかのクラスからでも使えるように書き換えただけ。
データを使うには、値を取得しないといけない。
ということで「get」を使う。
- setterと同様に、ほかのクラスからでもアクセスできるようにしたいから「public」を使う
- getterは得た情報を()内に戻すから戻り値が必要
⇒returnを{}内で使用するから、voidではなく変数の型を書く - 変数名を書くときはまずgetと書き、続けて頭文字が大文字の変数名を書く(getAge)
- ()内は空白
- {}内に取得したいデータを()内に返すための「return」を使う

return(戻り値)を使うのに()内が空白でいいのは、この部分をsetterで設定しているから。
全部同じクラス内に書くと、以下のようになる。
public class GetterSetter {
private int age;
public void setAge(int A) {
age=A;
}
public int getAge() {
return age;
}
}
メインメソッドで呼び出して使ってみる
privateに設定したデータを使えるようにしたところで、実際にメインメソッド内で呼び出して使ってみることにする。
- まず、GetterSetterクラスのオブジェクトを作ってGetterSetterクラスがメインメソッドで使えるようにする
- setがついたメソッドを使って値を設定する
- getがついたメソッドを使って、その値を取得する
オブジェクトの作り方はこちらを参照
自作したクラスに状態を表すデータを作る-オブジェクトの作成方法 by Javaプログラミング初心者 Vol.37
GetterSetter gs = new GetterSetter();
オブジェクト名は「gs」と適当につけた。
次に値を設定する。
設定するのはsetterだから「set」を使う。
もう一度GetterSetterクラス内のsetを使ったメソッドを思い出してほしい。
this.age=A;
}
setの()内に「int A」という整数の変数データを作った。
そして「A」は「age」を表すというのを{}内で定義している。
だから、このsetAgeの()内に数字を入れることで、ageを設定することができる。
ということで、コードは以下のようになる。
gs.setAge(10);
自分で作ったオブジェクト名と使いたいメソッド名を書けばOK。
そしてこれを画面に表示させたいから「System.out.println()」を使う。
ただ、「gs.setAge(10);」をそのまま使えない。
setはデータを書き換えるものであって、データを取得、保持する能力はない。

とりあえず、画面に表示させたりとかする時はgetを使うってことだね。
だから「get」を使う。
System.out.println(gs.getAge());
ここで思い出すのはGetterSetterクラスのgetを使ったメソッド。
return age;
}
setですでにage=Aと定義して、Aが「10」と入力した。
ということは、ageも「10」ということであり、それがreturnを使ってgetの()内に値が返される。
だから「return age」の「age」は「10」であり、()内にそのまま返るから空白のままでも「10」という数字が入っていることになる。

空白のままでも実行すると「10」が表示される。
私が作ってみたコードは下のような感じ。
GetterSetterUseとクラスを作って、メインメソッドも作ったものを用意してプログラムを実行。
public class GetterSetterUse {
public static void main(String[] args) {
GetterSetter gs = new GetterSetter();
gs.setAge(10);
System.out.println(gs.getAge());
}
}

10
今回はintを使って数字を表示させたけど、もちろん「String」を使って文字列を表示させたり、「double」を使って小数点を表示させることも可能。
GetterとSetter必要、不必要問題
結局「private」と設定したデータを使えるようにするわけだから、GetterとSetterを使わずに最初から「public」とすればいいんじゃないか、GetterとSetterは使ってはダメという人もいるみたい
私はまだ触れたばかりだから深くは理解していないけど、直接大事なデータを触られないようにするという点ではGetterとSetterは使ってもいいものだと思う。
まあ、確かにsetterとgetterを作ってと、回りくどいことをしないといけないというのは否めないけど・・・。

まあいいじゃんっていう精神。
最後に
今回チラッと出した「this」については、次にまとめたいと思う。
getterとsetterを使うと、どのクラスからでもアクセスできるようになる半面、せっかくprivateに設定した意味がなくなっちゃうというのもある。
でも直接大事なデータを触られないという意味では、情報保護にはなるかな?
そういったコードが存在するということは、覚えておいて損はないでしょうということで、今回はここまで。
コメント