일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- elasticsearch cache
- API
- request cache
- Aggregation
- mysql
- Analyzer
- Query
- 테슬라
- 아이온큐
- Cache
- JPA
- vavr
- redis
- NORI
- ann
- api cache
- java
- aqqle
- file download
- Elasticsearch
- TSLA
- java crawler
- dbeaver
- Selenium
- aggs
- Docker
- Elastic
- KNN
- IONQ
- 양자컴퓨터
Archives
- Today
- Total
아빠는 개발자
[java] Value annotation - lombok 본문
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
반응형
'Java' 카테고리의 다른 글
[java] Value annotation (0) | 2025.02.01 |
---|---|
[java] VO, DTO, DAO 구성 (0) | 2025.02.01 |
[java] 멀티스레드 최적화 (java application batch) - 테스트 편 (0) | 2024.09.22 |
[java] 멀티스레드 최적화 (java application batch) - 이론편 (1) | 2024.09.21 |
[java] 함수형 프로그래밍(Functional Programming) 은? (0) | 2024.09.02 |