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() 자동 생성
}
}
특징 요약
- 불변 객체 생성: 모든 필드가 final
- 생성자 제공: 모든 필드를 포함하는 생성자 자동 생성
- Getter 메서드 제공: 모든 필드에 대한 Getter
- 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
반응형