MENU
👇しうが厳選・おすすめのブログ!
しう
【テニス好きブロガー】 
テニス、読書が好きです。IT企業で学んだこともブログに書いています。高校教諭(テニス部顧問)→IT企業。テニス歴12年。人生をより有意義なものにしたいと思い、ブログを書き始めました。Twitterもしています。
アーカイブ

JavaでLombok! (@Builder)【しうの備忘録】

Java Spring Lombok Builder

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

 

PC好きな一郎君

Builder って何なの?

しう

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

 

PC好きな一郎君

そんな機能もあるんだ

しう

Builder を 使えるとコードがすっきりするからオススメやねん!

 

記事の信頼性:未経験からIT企業の受託企業へ転職に成功。現役プログラマーの「しう」がJavaの Builderについてお伝えします。

目次

Builderとは?

Java Spring Lombok Builder

Lombok(ロンボック、ロンボク)で利用できるアノテーションの一つです!

 

@Builderをつけることで、Springでsetterなどを自動生成してくれます。

 

Lombokはかなり便利な機能なので、身に付けておくといいでしょう。

 

SpringでのLombokの使い方のまとめは、今後執筆予定です。

(Intelli JやEclipseでLombokを利用するには、準備が必要です)

 

Javaには色々便利な機能が用意されていますね。

 

👇Javaの基礎が怪しい人はこちらの講座で基礎固めをした方が近道です!

プログラミング(Java・Kotlin)のお...
Udemy Javaのおすすめ講座【初心者向け・6選】 | プログラミング(Java・Kotlin)のお悩み解決ラボ! 今回はUdemyでJavaの初心者向けにおすすめ講座をまとめました!Udemyでは実際に動画を見ながら環境構築もできるのでおすすめです。ハンズオンで(自分の手を動かしながら)...

Builderの使い方

Java Spring Lombok 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のメリット

Java Spring Lombok 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の機能について学びたい人はこちらでおすすめの講座を紹介しています。

あわせて読みたい
Udemy Springのおすすめ講座・3選【迷ったらこれを見て!】 UdemyのSpringでおすすめの講座をご紹介します!   今回はSpringの初心者向けの講座をまとめてみました。   Springを勉強してるんだけど、本はコードを書いたりしにく...

 

PC好きな一郎君

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

しう

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

Builderのデメリット

Java Spring Lombok Builder

Builderのデメリットについてもご紹介します。

 

  • 単純なコンストラクタ
  • 知らない初学者が困惑する

についてお伝えします!

単純なコンストラクタ

一つ目のデメリットは、単純なコンストラクタの場合です!

 

ExperimentService experimentService = new ExperimentService ();

と簡単に書いていた場合、Builderを利用すると次のようになります。

 

ExperimentService experimentService 
= ExperimentService.builder().build();

 

簡潔に書いた方が可読性があがるので、この場合はBuilderを利用しなくてもいいです。

知らない初学者が困惑する

二つ目のデメリットは、 Builder を知らない初学者が困惑することです!

 

Builderは便利な機能ですが、Springの勉強を始めて日が浅い場合、これは何だと感じます。

(しうも初めて見た時はそうでした笑)

 

しかし、Builderはそこまで難しくない機能なので、このデメリットはあまり気にしなくていいでしょう。

まとめ

いかがでしたか?

 

今回は、SpringのLombokでのBuilderについて

 

  • Builderとは?
  • Builderの使い方
  • Builderのメリット
  • Builderのデメリット

の順番でご紹介しました!

 

しうが実際に現場で働いて見て、出てきた内容なので実践で使ってみてくださいね。

 

解説に間違いがあれば、お手数ですが下にあるコメントもしくはtwitterよりご連絡ください。

 

☟あわせて読みたい 「しう」のオススメブログ

あわせて読みたい
【Java初心者向け】必読の書籍・エンジニア志望なら見ておきたい! プログラミング初心者がJavaを勉強するときに、何を見て勉強するでしょうか?   学習サイト、書籍、Youtubeなどの動画。 今の時代、学び方の選択肢はとても多いです。 ...
あわせて読みたい
Javaで暗号化・cipherの活用方法とは?【しうの備忘録】 暗号化という言葉を聞いたことはありますか?   ほとんどの人が暗号化という言葉を知っているでしょう。 プログラミングではパスワードを暗号化したりします。   今回...
あわせて読みたい
【独学だけで厳しいと感じたら】無料のプログラミングスクール3選 「しう」はプログラミングの勉強を独学で始めました。 最初はなかなか難しく感じ、配列の利用方法を完ぺきに身につけることさえ、時間がかかりました。   大学のテニス...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

【しう】
Java Engineer| 最近はKotlin| 「テニスとJava(プログラミング)のお悩み解決ラボ」運営者| プログラミング・開発現場の学びを主に発信|【経歴】受託系IT企業➪自社開発企業| ∮保有資格∮ : Java Silver,Oracle SQL Silver,基本情報,TOEIC 750,簿記3級

コメント

コメントする

CAPTCHA


目次