컴파일과정에서 생성해 주는 방식으로 동작하는 java라이브러리입니다.
@Value
기본적으로 불변객체로 만들어준다.
class에 선언하면 아래의 어노테이션이 기본적으로 포함된다.
@Getter @AllArgsConstructor
@ToString @EqualsAndHashCode
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
하지만
@Setter 는 포함되지 않는다.
왜냐하면 기본적으로 불변성을 보장하기 때문에 setter를 생략하는 것은 당연하다
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) 는 private이나 final 을 사용할 수 있게 해준다.
최종적으로 @Value 를 사용한는 것은 아래와 같다.
import lombok.Getter;
import lombok.ToString;
import lombok.EqualsAndHashCode;
import lombok.experimental.FieldDefaults;;
import lombok.AllArgsConstructor;
@Getter
@ToString
@EqualsAndHashCode
@FieldDefaults(makeFinal = true)
@AllArgsConstructor
public class Student {
private String name;
private int section;
}
@Data
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
public class Person {
private Long id;
private String firstName;
private String lastName;
private String email;
private int age;
}
+ @Data With @Builder
@Data 는 필수 생성자를 생성한다.
하지만 @Builder를 함께 사용하면 갑자기 @Data 가 모든 필드 값을 파라미터로 받는 생성자를 생성한다.
Spring DI 는 객체를 초기화하기 위해 파라미터가 없는 기본 생성자에 의존하기 때문에
@NoArgsConstructor를 사용하여 기본생성자를 사용해줘야 한다.
안그러면 에러남
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Person {
...
}
@NoArgsConstructor 파라미터가 없는 기본 생성자 생성
@AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자 생성
@RequiredArgsConstructor final , @NonNull인 필드 값만 파라미터로 받는 생성자 생성
참고 사이트
'WEB > JAVA' 카테고리의 다른 글
Java 8 Interface - default 메서드, static 메서드 (0) | 2022.03.23 |
---|---|
[MapStruct] 내가 찾아 쓰려고 정리한 글 (0) | 2022.03.16 |
내가 보려고 정리하는 JAVA 멀티 스레드 5- 스레드풀 (0) | 2021.10.06 |
내가 보려고 정리하는 JAVA 멀티 스레드 4- 데몬 스레드, 스레드 그룹 (0) | 2021.10.06 |
내가 보려고 정리하는 JAVA 멀티 스레드 3- 스레드 상태 (0) | 2021.10.05 |