setterとgetterとは?使い方についても by Javaプログラミング初心者vol.44

スポンサーリンク
Java getter setter this Java攻略

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を使う時には以下のルールがある

  1. メソッドの名前は「get」もしくは「set」で始める
  2. 参照したいデータの変数名を先頭文字のみ大文字にして「get」もしくは「set」に続ける
  3. get」は{}内はreturnを使って値をgetメソッドの()内に返す
  4. set」は()内に新たな変数名を設定し、その変数がprivateのデータを持つようにする
  5. キーワード「this」を使い、その後ろにprivateの変数名を続ける
  6. 新たに設定した変数名を「=」で繋ぐ
thisは現時点でのオブジェクトを参照するために使う。
privateで設定された変数は、ほかのクラスからアクセスすることができないから、別の変数を割り当てることで使えるようにしようというのが「set」。

文字ばっかりで分かんないよ。

実際にコードを見てみる

 

まず新しく「GetterSetter」という名前のクラスファイルを作って、適当に「private」を使ってコードを書いてみた。

public class GetterSetter {
private int age;
}

このままだとほかのクラスから情報を使えない。

情報を使えるようにするために、まず新しい変数を作ってprivateになっている「int age」の情報を割り当てる。

ということで「set」を使う。

 

  1. 他のクラスからでもアクセスできるようにしたいから「public」を使用
  2. returnといった戻り値は使わないから「void」を使用
  3. 変数名を書くときは、まずsetと書いて続けて頭文字が大文字の変数名を書く(setAge
  4. ()内には、新しい変数の型と変数名を記入
    変数の型は、参照したいprivateデータの型と一緒のもの(今回はint)
  5. {}内にはprivateになっているデータをどこに入れるのかを設定
    今回は変数Aを作って、Aの中に入れることにする
この「this」はGetterSetterクラスのオブジェクトを参照するように指示しているもの。
もしクラス内に同じ変数名があったときに、thisを使うか使わないかで違う実行結果が出ることがある。※今度まとめます

続けて書くと以下のようになる

public void setAge(int A) {
this.age=A;
}

今回の使い方に限っては、thisなくて「age=A」だけでも大丈夫みたいだった。

 

 

ただ、値を設定しただけでは、まだデータは使えない。
setterはあくまでもほかのクラスからでも使えるように書き換えただけ。

データを使うには、値を取得しないといけない。
ということで「get」を使う。

 

  1. setterと同様に、ほかのクラスからでもアクセスできるようにしたいから「public」を使う
  2. getterは得た情報を()内に戻すから戻り値が必要
    ⇒returnを{}内で使用するから、voidではなく変数の型を書く
  3. 変数名を書くときはまずgetと書き、続けて頭文字が大文字の変数名を書く(getAge
  4. ()内は空白
  5. {}内に取得したいデータを()内に返すための「return」を使う

 

return(戻り値)を使うのに()内が空白でいいのは、この部分をsetterで設定しているから。

 

全部同じクラス内に書くと、以下のようになる。

public class GetterSetter {
private int age;

public void setAge(int A) {
age=A;
}
public int getAge() {
return age;
}
}

 

メインメソッドで呼び出して使ってみる

 

privateに設定したデータを使えるようにしたところで、実際にメインメソッド内で呼び出して使ってみることにする。

  1. まず、GetterSetterクラスのオブジェクトを作ってGetterSetterクラスがメインメソッドで使えるようにする
  2. setがついたメソッドを使って値を設定する
  3. getがついたメソッドを使って、その値を取得する

 

GetterSetter gs = new GetterSetter();

オブジェクト名は「gs」と適当につけた。

次に値を設定する。

 

設定するのはsetterだから「set」を使う。

もう一度GetterSetterクラス内のsetを使ったメソッドを思い出してほしい。

public void setAge(int A) {
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を使ったメソッド。

public int getAge() {
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に設定した意味がなくなっちゃうというのもある。

でも直接大事なデータを触られないという意味では、情報保護にはなるかな?

そういったコードが存在するということは、覚えておいて損はないでしょうということで、今回はここまで。

 

 

 

 

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました