Java Lombok | 값 객체 - @Value

@Value

클래스에 @Value 어노테이션이 선언되면, 다음의 어노테이션들을 모두 선언이 들어간다.

  • @Getter
  • @ToString
  • @EqualsAndHashCode
  • @AllArgsConstructor

그리고, 클래스 및 각 필드 final이 되고, 각 필드는 자동으로 접근제어자가 private이 된다. 이는 DDD 값 객체가 된다.

package com.devkuma.tutorial.lombok;

import lombok.Value;

@Value
public class ValueTutorial {

    String string;
    int number;
}

위 코드는 @Value로 인해 아래와 같이 변경된다.

package com.devkuma.tutorial.lombok;

public final class ValueTutorial {
    private final String string;
    private final int number;

    public ValueTutorial(String string, int number) {
        this.string = string;
        this.number = number;
    }

    public String getString() {
        return this.string;
    }

    public int getNumber() {
        return this.number;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof ValueTutorial)) {
            return false;
        } else {
            ValueTutorial other = (ValueTutorial)o;
            if (this.getNumber() != other.getNumber()) {
                return false;
            } else {
                Object this$string = this.getString();
                Object other$string = other.getString();
                if (this$string == null) {
                    if (other$string != null) {
                        return false;
                    }
                } else if (!this$string.equals(other$string)) {
                    return false;
                }

                return true;
            }
        }
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        result = result * 59 + this.getNumber();
        Object $string = this.getString();
        result = result * 59 + ($string == null ? 43 : $string.hashCode());
        return result;
    }

    public String toString() {
        String var10000 = this.getString();
        return "ValueTutorial(string=" + var10000 + ", number=" + this.getNumber() + ")";
    }
}



최종 수정 : 2024-01-18