プロパティ
プロパティは、多くのプログラミング言語に存在する概念であり、すでにご存じの方も多いであろうが、改めて復習しましょう。
多くの場合、プロパティはクラスが持つフィールド変数などの「状態」にアクセスするための API です。一般的にフィールド変数などの状態に、クラスの外部から直接アクセスするのは拡張性の面でよくないと言われており、プロパティとしてフィールド変数をカプセル化、getter、setter メソッドを通じて、フィールド変数の値を読み書きします。
また、ある状態が変更された時に、その副作用として関連する項目の状態を変更しなければならないときも、値を変更する setter メソッドの中で、関連する項目の更新を行い、クラス内の状態の生合成の担保や、詳細な使用を外部のクラスから隠蔽します。
Java でプロパティを宣言する
プロパティの概念について再確認ができたところで、Java でプロパティを宣言する方法を見てみましょう。
getter と setter
冒頭で述べたとおり、外部のクラスなどからフィールド変数を直接参照するようなことは、オブジェクト指向のプログラミング言語では基本的に NG とされているため、フィールド変数は private スコープとして宣言します。
public class Person {
private String name;
}
そして、そのフィールド変数に外部からアクセスするためのアクセッサとして getter と setter メソッドを用意します。
public class Person {
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
プロパティにアクセスする
上記で作成したプロパティに、外部のクラスからアクセスする場合は、次のように Person クラスに定義した「getter / setter メソッド」ドを通じて行います。
public class Parent {
public static void main(String[] args) {
Person person = new Person();
// 値の設定(setter)
person.setName("山田 太郎");
// 値の取り出し(getter)
System.out.println(person.getName());
}
}
getter/setter を自動生成する
プロパティの数、つまり「getter/setterメソッド」でカプセル化が必要なフィールド変数が多くなると、とてもではありませんが、手動で「getter / setter メソッド」を用意するのは大変で現実的ではありません。
Java が登場した初期のころは、この作業も手作業で行われていましたが、現在は統合開発環境のなどのツールによって自動生成できるため、基本的にはツールを使ってメソッドを自動生成します。
Eclipseで getter/setter を自動生成する方法
まずは、Java の統合開発環境として最もメジャーな Eclipse で、getter/setter を自動生成する方法を見ていきましょう。
まず、次のようにプロパティでカプセルかするフィールド変数を用意したコードを準備します。
public class Person {
private String name;
private int age;
private String address;
}
エディタ上で「getter / setter メソッド」を挿入する位置にカーソルを合わせて、右クリック → 「ソース」→「getterおよびsetterの生成」を選択します。
「getter / setter メソッド」を自動生成するフィールド変数にチェックを入れます。(今回はすべてチェック)
また、挿入ポイント、ソート順、アクセス修飾子を設定し「生成」ボタンをクリックすると、自動生成されます。
Visual Studio Codeで自動生成する方法
Visual Studio Code (通称:VSCode)は、軽量・高速なコードエディタで、近年人気を集めており、追加で拡張機能を入れることにより、いろんな機能が追加でき、Java アプリ開発についても、拡張機能を追加することで、ソースコードのフォーマット、候補表示、デバッグ実行などができます。
VSCode でプロパティを自動生成するためには、Java の拡張機能を追加する必要があります。次のイメージのように、拡張機能のメニューより「Extension Pack for Java」を検索しインストールします。
インストールが完了したら、先ほどと同じように、フィールド変数を定義したクラスを準備します。
public class Person {
private String name;
private int age;
private String address;
}
エディタ上で「getter / setter メソッド」を挿入する位置にカーソルを合わせて、右クリック → 「ソースアクション」を選択します。
次に「Generatre Getters and Setters」を選択します。
プロパティを自動生成するフィールド変数を選択し「OK」をクリックします。(今回は全フィールドのチェックをONにします)
すると、次のイメージのように 「getter / setter メソッド」が、エディタのカーソルの位置に挿入されます。
lombokでgetter / setter を省略
「getter / setter メソッド」は、ツールで自動生成できるとはいえ、手間で退屈な作業で、フィールド数が多いクラスともなると、それだけでコードの行数が増えてしまいます。
Lombok はこの冗長になりがちな 「getter / setter メソッド」の記述を省略できるライブラリです。
具体的には、Lombok はソースコード上に「getter / setter メソッド」を記述しなくても、クラスやフィールどにアノテーションを指定しておくだけで、コンパイル時に自動生成してくれます。
つまり、コード上に「getter / setter メソッド」を書かなくても、呼び出し元のクラスからは、getプロパティ名()や、setプロパティ名(value) でアクセスできるのです。
Lombokのインストール
Lombok を以下の URL のページからダウンロードします。
https://projectlombok.org/download.html
ダウンロードした jar ファイルをダブルクリックし、表示された画面の指示に従いインストールします。
Java プロジェクトへの追加
次に Lombok を使用する Java プロジェクトにも依存関係を追加します。
Maven の場合は、pom.xml に以下の依存関係を追加します。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
Gradle の場合は、build.gradle に以下のように依存関係を追加します。
// https://mvnrepository.com/artifact/org.projectlombok/lombok
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.22'
### Lombokの使い方
Lombok で「getter / setter メソッド」を自動生成する方法には、大きく次の2つの方法があります。
1つ目は「getter / setter」を自動生成するフィールドに、@Getter および @Setter を付ける方法です。@Getter を付けると getter メソッドが、@setter を付けると setter メソッドがコンパイル時に自動生成されます。
import lombok.Getter;
import lombok.Setter;
public class Person {
@Getter @Setter
private String name;
@Getter @Setter
private int age;
@Getter @Setter
private String address;
}
2つ目は、クラスに @Data アノテーションを付ける方法です。@Data を付けると、クラスのすべてのフィールド変数に対し、「getter / setter メソッド」が自動で生成されます。
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
private String address;
}
まとめ
Java のプロパティの概要と、getter と setter メソッドを自動生成する方法を解説しました。プロパティは Java の基本的な概念であるため是非覚えておきましょう。
【関連記事】
▶Javaオブジェクトをシリアライズしてファイルに出力
Visual Studio Code で Java の開発をする場合は、上記のインストール手順は不要で、別に「Lombok Annotations Support for VS Code」という拡張機能をインストールする必要があります。