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?

※備忘録 Lombokとは

Posted at

Lombokの本質

例えば、生Javaで人間を表すクラスを作成するとする

public class Person {
    private String name; //privateはこのクラスからしかアクセスできないという意味。
    private int age;
}

この生Javaの場合、getterやsetterは自分で記載しないといけない。
これを毎回書くのは面倒。
以下は、Lombokなしでコンストラクタ、getterやsetterを書いた場合

pulic class Person {
    private String name;
    private int age;

    //コンストラクタ
    public Person(String name,int age) { 
        this.name = name;
        this.age = age;
    }

    //getter 
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

    public void setAge(int age) {
        this.age = age;
    }
}

上記のように、getter・setter・コンストラクタを毎回書くとコードが長くなり、冗長になりやすいです。

そこでLombokの登場。Lombokを使用すると、上記のコードを以下のように簡潔に書ける。

import lombok.Data;
import lombok.AllArgConstructor;

@Data
@AllArgConstructor
public class Person {
    private String name;
    private int age;
}

各アノテーションの意味

アノテーション 役割
@Data getter / setter / toString / equals / hashCode を自動生成する
@AllArgsConstructor すべてのフィールドを引数に取るコンストラクタを自動生成する

Lombokの仕組み

Lombokはコンパイル時にコードを自動生成してくれます。
だから、ソースコード上では短くても、実際にコンパイルされたクラスファイルにはgetter/setter/toStringなどが含まれています。

Lombokが内部で生成してくれるコード(実際はこんな感じ)

public class Person {
    private String name;
    private int age;

    // コンストラクタ
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter
    public String getName() { return name; }
    public int getAge() { return age; }

    // setter
    public void setName(String name) { this.name = name; }
    public void setAge(int age) { this.age = age; }

    // toString, equals, hashCode も自動生成される
}

復習 コンストラクタについて

コンストラクタとは

オブジェクトを作るときに最初に呼ばれる特別なメソッドのことです。
たとえば次のコード:

Person p = new Person("けい",28)

このとき呼ばれているのが 👇

public Person(String name,int age) {
    this.name = name;
    this.age = age;
}

ここで Person(...) の部分が コンストラクタの呼び出し です。
つまりコンストラクタは、「そのオブジェクトがどんな初期状態で生まれるか」を決める役割を持っています。

コンストラクタの書き方

//基本形
public クラス名(引数リスト) {
    // 初期化処理
}

なぜコンストラクタが必要なのか

理由①:オブジェクトに初期値を与えるため

Person p = new Person("けい", 28);

こうすることで、p は「名前がけいで年齢28歳の人」として作られます。

理由②:オブジェクトを作る瞬間に処理を入れられる

public Person(String name, int age) {
    System.out.println("新しい人を作りました!");
    this.name = name;
    this.age = age;
}

@AllArgsConstructorについて

Lombok が「全フィールドを引数に取るコンストラクタ」を自動生成してくれる アノテーションです。

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

Lombokが裏で自動生成するコード

public class Person {
    private String name;
    private int age;

    // 👇 @AllArgsConstructor によって自動生成されるコンストラクタ
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
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?