Javaのgetterとsetterとは?使い方もわかりやすく解説

2022年10月9日

javaのgetterとsetterとは?使い方もわかりやすく解説

シン

フリーランスエンジニア|Oracle認定Java Gold保有|全日本SEO協会認定 SEO検定全級保有(1〜4級)|プログラミング、エンジニア、SEO情報を発信|大阪在住

「Javaのgetterとsetterとは何ですか?使い方や必要性についても教えて欲しい」

こんな疑問にお答えします。

プログラミング言語「Java」では、getterとsetterで変数を扱うことができます。

getterとsetterは多くの現場でも使われていることがあるため、これからJavaエンジニアとして活躍していくのであれば、必須の知識といっても過言ではありません。

そこで今回は、Javaのgetterとsetterについて、初心者の方にもわかりやすく解説していきます。

僕自身、現役でフリーランスエンジニアをやっています。実務でJavaを用いた開発を行なっており、Javaの資格も保有していますので、それらの知見を元に丁寧に解説していきますね。

この記事を読み終える頃には、getterとsetterについての理解が深まり、Javaエンジニアとして一段階スキルアップすることができますよ。

ぜひ最後までご覧いただき、開発に役立ててみてください。

Javaのgetterとsetterとは?

まず基本的なgetter(ゲッター)とsetter(セッター)とは何かを見ていきましょう。

  • getterとは
  • setterとは

getterとは

getterとは、setterでセットしたフィールドの値を取得して、returnで呼び出し元に値を返すメソッドのことを指しています。

getterの書き方

getterの基本的な書き方は以下の通りです。

// フィールド
private String sample;

// setterメソッド
public String getSample() {
    return sample;
}

getterはget〇〇というメソッド名です。この〇〇は、フィールドの名前と同じになります。

setterとは

setterとは、フィールドに値をセットするためのメソッドのことをいいます。setterでセットした値を、getterで取得します。

setterの書き方

setterの基本的な書き方は以下の通り。

// フィールド
private String sample;

// getterメソッド
public String getSample() {
    return sample;
}

// setterメソッド
public void setSample(String sample) {
    this.sample = sample;
}

setterメソッドは、set〇〇と書きます。この〇〇は、フィールド名と同じです。

setterは呼び出し元のメソッドから値を引数で受け取り、引数の値をthisを使ってフィールドにセットしています。

this.sample = sample;の「this」はフィールドの値を指しています。this.sample = sample;の「= sample;」は、引数です。

Javaのgetterとsetterの使い方をわかりやすく解説

getterとsetterの使い方をわかりやすく解説していきますね。

  • getterの使い方と命名規則
  • setterの使い方と命名規則

getterとsetterの使い方

では、メインクラスからsetterに値をわたしてセットし、getterで値を取得するプログラムを作成していきましょう。

まずはSampleクラスでgetterとsetterメソッドを作成します。

public class Sample {
  // フィールド
  private String sample;

  // getterメソッド
  public String getSample() {
    return sample;
  }

  // setterメソッド
  public void setSample(String sample) {
    this.sample = sample;
  }

}

続いて、メインクラスを作成します。

public class Main {
  public static void main(String[] args) {
    // Sampleクラスをインスタンス化
    Sample sample = new Sample();
    // 変数aに値を代入
    String a = "こんにちは";
    
    // setterメソッドに変数aを渡す
    sample.setSample(a);
    // getterメソッドでsetterでセットした変数aを取得し出力する
    System.out.println(sample.getSample());
		
  }
}
■実行結果:
こんにちは

上記のコードを解説しますと、まずメインクラスでsetterに変数を渡して、値をSampleクラスのフィールドにセットしています。

そのセットした値をgetterメソッドを呼び出して取得しています。シンプルですね。

getterとsetterの命名規則

ではgetterとsetterの細かな命名規則についても理解しておきましょう。先ほど使用したSampleクラスを例に解説していきます。

public class Sample {
  // ①フィールド
  private String sample;

  // ②getterメソッド
  public String getSample() {
    return sample;
  }

  // ③setterメソッド
  public void setSample(String sample) {
    this.sample = sample;
  }

}

getterとsetterの命名規則

  • フィールド:アクセス修飾子はprivate、戻り値はセットしたい値に準ずる。
  • getterメソッド:アクセス修飾子はpublic、戻り値はフィールドと同じ、メソッド名はget〇〇、return フィールド名;で呼び出し元に値を返す
  • setterメソッド:アクセス修飾子はpublic、戻り値はvoid、メソッド名はset〇〇、this.フィールド名 = 引数;で値をセットする

上記の通りですね。

ポイントとしては、まずフィールドのアクセス修飾子はprivateになるところです。

これは「カプセル化」というオブジェクト指向の概念です。setterメソッドでしかフィールドに値をセットできなくすることで、外部から変数の値を書き換えられなくしています。

また、setterメソッドは値をセットするだけで何も返さないため、戻り値はvoidです。

ひとまず、ここまで理解しておけば、getterとsetterを実務で使えるレベルには達しているでしょう。

Javaのgetterとsetterを自動生成する方法

getterとsetterはIDEによっては自動で生成することが可能です。

getterとsetterを生成する場合は、なるべく専用のクラスで作成すると良いですね。

  • IDE(Eclipse)で自動生成する
  • getterとsetterは専用のクラスで作成しよう

IDE(Eclipse)で自動生成する

今回はEclipse(2020)を使って自動生成する方法を簡単に解説していきますね。
※バージョンによっては解説画像と異なる場合があります

まずはgetterとsetter用のクラスを作成します。次にフィールドを作成し、フィールドにマウスカーソルをあてます。

すると、下記の画像のように「フィールド Sample.sampleの値は使用されていません」というポップアップが出てきますので、「'sample'のgetterおよびsetterを作成します...」をクリックします。

javaのgetterとsetterを自動生成する方法1

続いて「フィールドのカプセル化」というポップアップがでてきますので、そのままOKをクリックします。

javaのgetterとsetterを自動生成する方法2

以上でgetterとsetterメソッドができあがりました。

javaのgetterとsetterを自動生成する方法3

ちなみに上記の方法以外でも、右クリックで作成することも可能です。フィールドを作成した後に、空白の箇所で右クリックをします。

次に「ソース」を選択し、「getterおよびsetterの生成」をクリックします。

javaのgetterとsetterを自動生成する方法4

getterとsetterを生成したいフィールドにチェックを入れ、右下の生成をクリックすると、自動生成されます。

javaのgetterとsetterを自動生成する方法5

getterとsetterは自動生成した方が、文法ミスなどを防ぐことができるので、なるべく自動生成すると良いですね。

getterとsetterは専用のクラスで作成しよう

getterとsetterは専用のクラスで生成するのが一般的です。

なぜなら、フィールドの値が増えれば増えるほど、getterとsetterメソッドが大量になるので、コードの可読性が悪くなるからです。

たとえば、多くの現場では、getterとsetterは以下のファイル名で作られることが多いです。

  • 〇〇Bean.java
  • 〇〇Model.java
  • 〇〇Form.java
  • 〇〇Entity.java

この辺りは現場のクラスの作成規則に沿って、作成してみると良いでしょう。

Javaのgetterとsetterを省略する方法

Javaのgetterとsetterは、JavaのLombok(ロンボック)というライブラリを利用すると、なんと記述を省略することができます。

Lombok は、アノテーションによってgetterやsetter、コンストラクタ等の機能を自動生成するためのライブラリです。

導入方法は以下の通り。

Lombokの導入方法

  • Lombokのjarファイルをダウンロード
  • ダウンロードした lombok.jarをダブルクリック等で起動
  • Lombokのインストーラが起動するので、 Specify location... をクリック
  • eclipse.exe が存在するフォルダを選択
  • Install / Update をクリック

以下は実際にアノテーションでgetterとsetterメソッドを生成したコードです。

public class Sample {
  @Getter
  @Setter
  private String name;

}

上記のように、@Getter、@Setterをフィールドの上に記述することで、getterとsetterメソッドを自動生成してくれます。

目に見えないだけで裏でメソッドが作られているので、実際には以下のコードと同じです。

public class Sample {
  @Getter
  @Setter
  private String name;
  
  // 自動生成される
  public String getName() {
    return name;
  }
  // 自動生成される
  public void setName(String name) {
    this.name = name;
  }
}

ちなみにクラスの上につけると、クラス内の全てのフィールドのgetterとsetterメソッドが生成されます。

@Getter
@Setter
public class Sample {
  private String name;
  private String id;

}

現場によってはgetterとsetterメソッドは省略してはいけないというところもあると思うので、この辺も現場のルールに沿ってやってみてください。

Javaのgetterとsetterの必要性

Javaのgetterとsetterの必要性とは一体なんでしょうか?

最後に以下の2点について解説していきます。

  • getterとsetterでカプセル化できる
  • セットしている変数を特定しやすい

その1:getterとsetterでカプセル化できる

getterとsetterの必要性は、カプセル化できるところです。

カプセル化とは、オブジェクト指向の概念の一つで、簡単にいうと情報を外側から操作できないように隠蔽(いんぺい)することです。

たとえば、変数の中身を外部から書き換えられてしまうと、予期せぬ値が入ってしまい、バグの原因にもなります。

そのため、フィールドはprivateで記述し、同じクラスのsetterとgetterでしか操作できないようにしています。

その2:セットしている変数を特定しやすい

getterとsetterを利用することで、どこで値をセットしているのか、またはゲットしているのかが特定しやすくなります。

getterとsetterメソッドの記述は、シンプルで統一感があるからです。

getterならget〇〇ですし、setterならset〇〇というメソッド名なので、メソッド名もすぐにわかります。

検索すれば簡単に特定することができます。

javaのgetterとsetterを検索

そのためgetterとsetter関連のエラーが起きた際に、バグの原因特定までの時間を短縮することが可能です。

まとめ

Javaのgetterとsetterについて解説しました。

getterとsetterは不要という意見も世の中には存在しますが、実際のところ現場ではよく使われるので、覚えておきましょう。

以下の記事では、Javaエンジニアになるためのロードマップをご紹介していますので、よければ参考にしてみてください。

  • この記事を書いた人

シン

フリーランスエンジニア|Oracle認定Java Gold保有|全日本SEO協会認定 SEO検定全級保有(1〜4級)|プログラミング、エンジニア、SEO情報を発信|大阪在住