lombok @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor static 필드들은 스킵
@Getter/@Setter
메서드에 붙인다면, lombok이 해당 메서드에 대한 기본 getter/setter를 생성해줍니다.
클래스에 붙인다면, static은 제외한 전체 필드에 @Getter와 @Setter 애노테이션이 적용됩니다.
@Getter(AccessLevel.PUBLIC)
생성되는 getter/setter에 명시적으로 AccessLevel을 명시해주지 않으면, 접근 제한자는 public이 됩니다.
허용되는 access level들은 None, PUBLIC, PROTECTED, PACKAGE, PRIVATE가 있습니다.
@NoArgsConstructor
파라미터가 없는 생성자를 생성합니다.
1. 필드들이 final로 생성되어 있는 경우, 필드를 초기화 할 수 없기 때문에 생성자를 만들 수 없고 에러가 발생합니다.
이 때는 @NoArgsConstructor(force = true) 옵션을 이용해서 final 필드를 0, false, null 등으로 초기화를 강제로 시켜서 생성자를 만들 수 있습니다.
2. @NonNull 같이 필드에 제약조건이 설정되어 있는 경우, 초기화를 진행하기 전까지 null-check 를 하지 않습니다.
@RequiredArgsConstructor
추가 작업을 필요로 하는 필드에 대한 생성자를 생성하는 애노테이션입니다.
초기화 되지 않은 모든 final 필드, @NonNull로 마크돼있는 모든 필드들에 대한 생성자를 자동으로 생성해줍니다.
@NonNull로 마크돼있는 필드들은 null-check를 하며, 파라미터에서 null값이 들어온다면 생성자에서 NullPointerException이 발생합니다.
@AllArgsConstructor
클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성해줍니다.
만약 필드중에서 @NonNull 애노테이션이 마크되어 있다면 생성자 내에서 null-check 를 수행합니다.