아빠는 개발자

[java] Value annotation - lombok 본문

Java

[java] Value annotation - lombok

father6019 2025. 2. 1. 23:33
728x90
반응형

Lombok의 @Value 어노테이션은 **불변 클래스(Immutable Class)**를 쉽게 생성하기 위해 사용됩니다.

이는 @Data와 유사하지만 모든 필드를 final로 설정하고 객체 자체를 불변(immutable)으로 만듭니다.

 

 

특징

  • 모든 필드를 private final로 설정
  • 생성자 자동 생성 (AllArgsConstructor)
  • Getter 메서드 자동 생성
  • toString(), equals(), hashCode() 자동 생성
  • Setter 메서드 생성 안 함 (불변 클래스이기 때문)

사용예제

import lombok.Value;

@Value
public class User {
    String name;
    int age;
}

 

위 코드는 아래와 같다.

public final class User {
    private final String name;
    private final int age;

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }

    @Override
    public boolean equals(Object o) {
        // equals() 자동 생성
    }

    @Override
    public int hashCode() {
        // hashCode() 자동 생성
    }
}

 

특징 요약

  1. 불변 객체 생성: 모든 필드가 final
  2. 생성자 제공: 모든 필드를 포함하는 생성자 자동 생성
  3. Getter 메서드 제공: 모든 필드에 대한 Getter
  4. Setter 미생성: 필드 수정 불가능

활용 

@Value
public class Product {
    String name;
    double price;
}

public class Main {
    public static void main(String[] args) {
        Product product = new Product("Laptop", 1500.00);

        System.out.println(product.getName());  // Laptop
        System.out.println(product.getPrice()); // 1500.0

        // product.setName("Tablet"); // 컴파일 에러: Setter가 없음
    }
}

 

주의사항

  • 클래스가 불변이어야 하므로 필드를 반드시 초기화해야 합니다.
  • final 키워드가 자동 적용되므로 객체 생성 후 값 변경이 불가능합니다.
  • 컬렉션 객체를 필드로 사용하면 불변성이 보장되지 않을 수 있으므로 조심해야 합니다 (Collections.unmodifiableList() 활용 고려).
728x90
반응형