0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Spring Boot】Lombokの基礎について学んだことをまとめた

Last updated at Posted at 2024-10-23

はじめに

初めまして。java初心者、エンジニア歴浅めの夜桜です。

転職して、java+spring bootを使った開発案件に参画させていただくことになりました。
そこでの研修で、lombokという便利機能があることを知り、学んだことがたくさんあるのでこちらに残しておきたいと思います。

ちなみにqiitaの記事を書くのは初めてなのと、時間の合間合間に書いたので、もしかすると間違えていることおあるかと思うので、いろいろと内容や技術コメント等ご意見をいただければ幸いです。

前提知識

突如研修出てきたDAO、DTOという言葉。
これがデザインパターン(ソフトウェア開発でのよく使用される設計パターンのこと)という言葉だということを露知らず、、「今までなにやっとったんかいな」といわれるかと思ったら丁寧にやさしく研修担当の方に教えていただきました。
Lombokでどの部分が便利なのかを知るには、このあたりの知識が必要になるので不必要と感じられる方はスキップしてください。

DAO/DTOデザインパターン

DAO:データベース関連の処理をまとめたクラスのこと。

DAOクラスを使えば他のクラスでデータベース処理のやり取り処理ごとにデータベース処理(クエリ)を書く必要がなくなる。
DBへのinsert、update処理などを管理する。

DTO:必要なデータを集めて、詰め込んで受け渡しやすい形にしたオブジェクトのこと。

必要なデータの受け渡し(サーバーサイドの処理で使うデータや、画面に表示するデータなど)に利用する。

イメージを下部に示す
※イメージはこちらのサイトを参考にさせていただきました。
DAO&DTO.png

Lombokとは

短刀直入に言うとこれがないとspring bootの開発効率は悪くなる。
Javaでの決まった定型コード(ボイラープレートコード)をソースコード上から排除するために使用されるライブラリを指す。
ボイラープレートコードには下記のものなどがあり、これらを機能ごとのDTOそれぞれでいちいちすべて実装するのは手間がかかる。

  • フィールドの数に応じたGetter/Setterメソッド(数が多くなればなるほど、その分用意する必要があり、本質的でない)
  • equals/hashCodeメソッド
  • toStringメソッド
  • コンストラクタ

Lombokはそれらを排除する代わりにアノテーションを付与することでこのような定型コードをコンパイル時に生成する仕組みを提供している。

アノテーション

提供している代表的なアノテーションは下記となる。

アノテーション 内容
@Getter Getterメソッドの生成
@Setter Setterメソッドの生成
@ToString クラス内でtoStringメソッドをオーバーライドする場合のtoStringメソッド生成
@EqualsAndHashCode クラス内でequals,hashCodeメソッドをオーバーライドする場合のequals,hashCodeメソッド生成
@RequiredArgsCostructor finalなど初期化が必要なフィールドに対してコンストラクタを生成
@AllArgsConstructor すべてのフィールドに対してコンストラクタを生成
@NoArgsConstructor デフォルトコンストラクタを生成
@Data @Getter, @Setter, @Totring, @EqualsAndHashCode, @RequiredArgsConstructorを指定したのと同じ意味

JavaBeanで作った場合とLombokを使った場合の比較

Food.java
public class Food {
    private int id;
    private String name;
    private int price;

    public Food() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Food{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Food food = (Food) o;
        return id == food.id &&
                price == food.price &&
                Objects.equals(name, food.name)
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, price);
    }
}

これがLombokだとたった数行でよくなる。

Food.java
import lombok.Data;

@Data
public class Food {
    private int id;
    private String name;
    private int price;
}

終わりに

今回はLombokの代表的の機能についてまとめました。とは言っても手を動かしてJavaを触っていないとどこが便利なのかはイメージできないかもしれません。
まずは手を動かすところから取り組むのが大切だなと感じます。

実は他にもロガーインスタンスの生成として@Slf4j でクラスをアノテーションすることでlogという名前でロガーが使えたりもします。
このあたりはログ設計などでも有効に使えると思うので、継続して勉強したいと思います。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?