今回は、Builderについて解説していきます!

Builder って何なの?



SpringのLombok(ロンボック、ロンボク)で使えるアノテーションの一つやで!



そんな機能もあるんだ



Builder を 使えるとコードがすっきりするからオススメやねん!
記事の信頼性:未経験からIT企業の受託企業へ転職に成功。現役プログラマーの「しう」がJavaの Builderについてお伝えします。
Builderとは?


Lombok(ロンボック、ロンボク)で利用できるアノテーションの一つです!
@Builderをつけることで、Springでsetterなどを自動生成してくれます。
Lombokはかなり便利な機能なので、身に付けておくといいでしょう。
SpringでのLombokの使い方のまとめは、今後執筆予定です。
(Intelli JやEclipseでLombokを利用するには、準備が必要です)
Javaには色々便利な機能が用意されていますね。
👇Javaの基礎が怪しい人はこちらの講座で基礎固めをした方が近道です!


Builderの使い方


Builderの使い方について見ていきます!
- @Build
- Builderでインスタンスを生成
の順番で見ていきましょう!
@Build
初めに、@BuilderでBuilderを使えるようにしていきます!
@Builder //クラスにつけるだけでOK!
public class ExperimentService {
private final String experimentSentence;
private final int num;
}
@BuilderをつけることでLombokが以下のようなコードを自動で生成してくれます。
public class ExperimentService {
private final String experimentSentence;
private final int num;
ExperimentService(String experimentSentence, int num){
this.experimentSentence = experimentSentence;
this.num = num;
}
public static ExperimentServiceBuilder builder(){
return new ExperimentServiceBuilder();
}
public static class ExperimentServiceBuilder{
private String experimentSentence;
private int num;
ExperimentServiceBuilder(){
}
public ExperimentService.ExperimentServiceBuilder experimentSentence(String experimentSentence){
this.experimentSentence = experimentSentence;
return this;
}
public ExperimentService.ExperimentServiceBuilder num(int num){
this.num = num;
return this;
}
public ExperimentService build(){
return new ExperimentService(experimentSentence, num);
}
public String toString(){
return "ExperimentService.ExperimentServiceBuilder(experimentSentence=" + this.experimentSentence + ",num" + this.num + ")";
}
}
}
Intelli J では、Alt+7で構造を表示して確認することができます。




ちなみに、ExperimentServiceBuilderクラスのフィールドがない場合
@Builder
public class ExperimentService {
}
生成されるコードは次のようになります。
public class ExperimentService {
ExperimentService(){
}
public static ExperimentServiceBuilder builder(){
return new ExperimentServiceBuilder();
}
public static class ExperimentServiceBuilder{
ExperimentServiceBuilder(){
}
public ExperimentService build(){
return new ExperimentService();
}
public String toString(){
return “ExperimentService.ExperimentServiceBuilder()”
}
}
}
ExperimentService のフィールドが増えていくたびに、ExperimentServiceのコンストラクタの引数とExperimentServiceBuilderのフィールド、setterが追加されていくことが確認できます。
Builderでインスタンスを生成
@Builderで設定したものを利用して、インスタンスを生成しましょう!
次のような書き方でBuilderのインスタンスを生成します。
final var experimentService = ExperimentService.builder()
.experimentSentence("実験用Builder ")
.num(100)
.build();
この場合、下記と同じようなコードが生成されます。
ExperimentService experimentService = new ExperimentService();
experimentService.setExperimentSentence("実験用Builder ");
experimentService.setNum(100);
コンストラクタを利用すると次のようになります。
ExperimentService experimentService
= new ExperimentService(“実験用Builder”, 100);
Javaでは、コードが見やすいようにするために様々な書き方がありますね。
Builderのメリット


Builderのメリットについてご紹介します!
Builderを使うメリットには
- 何をsetterに入れているのかわかりやすい
- 順番や変数の数を気にしなくていい
があります。
それぞれ見ていきましょう!
何をsetterに入れているのかわかりやすい
何をsetterに入れているのかわかりやすいことが一つ目のメリットです!
Builderを利用すると以下のようになります。
final var experimentService = ExperimentService.builder()
.experimentSentence("実験用Builder ")
.num(100)
.build();
これを、setterを利用する場合は、次のようになります。
ExperimentService experimentService = new ExperimentService();
experimentService.setExperimentSentence("実験用Builder ");
experimentService.setNum(100);
コードがスッキリしますよね。
しかも、setterの場合は100行ほど離れたところでも書けてしまうので、どこに書いてあるかの判断も難しくなります。
一方で、Builderの場合はどこに書いてあるのか一目瞭然です。
可読性が上がることがメリットになります。
順番や変数の数を気にしなくていい
順番や変数の数を気にしなくていいことが二つ目のメリットです!
コンストラクタを利用している場合では、引数に気を付けないといけません。
ExperimentService experimentService
= new ExperimentService(“実験用Builder”, 100);
引数が、次のようになると使えなくなります。
(当てはまるコンストラクタを定義していない場合)
//2つ目のint型の引数がないパターン
ExperimentService experimentService
= new ExperimentService(“実験用Builder”);
//順番が逆のパターン
ExperimentService experimentService
= new ExperimentService(100, “実験用Builder”);
@Builderを利用すると、値を渡す順番を気にしなくていいので便利ですね。
👇もっと詳しくSpringの機能について学びたい人はこちらでおすすめの講座を紹介しています。





Builderのメリットばかり見てきたけど、デメリットはないん?



Builder のデメリットについても見ておこか!
Builderのデメリット


Builderのデメリットについてもご紹介します。
- 単純なコンストラクタ
- 知らない初学者が困惑する
についてお伝えします!
単純なコンストラクタ
一つ目のデメリットは、単純なコンストラクタの場合です!
ExperimentService experimentService = new ExperimentService ();
と簡単に書いていた場合、Builderを利用すると次のようになります。
ExperimentService experimentService
= ExperimentService.builder().build();
簡潔に書いた方が可読性があがるので、この場合はBuilderを利用しなくてもいいです。
知らない初学者が困惑する
二つ目のデメリットは、 Builder を知らない初学者が困惑することです!
Builderは便利な機能ですが、Springの勉強を始めて日が浅い場合、これは何だと感じます。
(しうも初めて見た時はそうでした笑)
しかし、Builderはそこまで難しくない機能なので、このデメリットはあまり気にしなくていいでしょう。
まとめ
いかがでしたか?
今回は、SpringのLombokでのBuilderについて
- Builderとは?
- Builderの使い方
- Builderのメリット
- Builderのデメリット
の順番でご紹介しました!
しうが実際に現場で働いて見て、出てきた内容なので実践で使ってみてくださいね。
☟あわせて読みたい 「しう」のオススメブログ






コメント