필드에 @Getter나 @Setter를 붙인다면 lombok이 해당 필드에 대한 기본 getter / setter를 생성해줍니다.
순수 자바 코드
public class LombokTest{
private String test;
public String getTest(){
return test;
}
public void setTest(String test){
this.test = test;
}
}
롬복코드
public class LombokTest{
@Getter
@Setter
private String test;
}
생성되는 getter / setter에 명시적으로 AccessLevel을 명시해주지 않으면 접근 제한자는 public이 됩니다.
허용되는 access level들은 PUBLIC, PROTECTED, PACKAGE, PRIVATE가 있습니다.
순수 자바 코드
public class LombokTest{
private String test1;
private String test2;
public LombokTest(){}
public String getTest1(){
return this.test1;
}
private String getTest2(){
return this.test2;
}
}
롬복 코드
public class LombokTest{
@Getter
private String test1;
@Getter(AccessLevel.PRIVATE)
private String test2;
}
클래스에 @Getter, @Setter를 붙인다면 전체 필드에 @Getter와 @Setter 애노테이션이 적용됩니다.
만약 특정 필드에서 @Getter, @Setter의 생성을 막고 싶다면 AccessLevel.None을 사용할 수 있습니다.
AccessLevel.None으로 값을 설정하면 해당 필드는 lombok이 메소드를 생성하지 않습니다.
순수 자바 코드
public class LombokTest{
private String test1;
private String test2;
public static String test3;
public LombokTest(){}
public String getTest1(){
return this.test1;
}
}
롬복 코드
@Getter
public class LombokTest{
private String test1;
@Getter(AccessLevel.NONE)
private String test2;
public static String test3;
}
static 필드, AccessLevel.None을 적용한 필드 모두 getter가 생성되지 않습니다.
enum에도 @Getter를 사용할 수 있습니다. 하지만 setter는 사용할 수 없습니다.
순수 자바 코드
public class LombokTest{
private String test1;
public LombokTest(String test1){
this.test1 = test1;
}
public LombokTest(){}
}
lombok 코드
@NoArgsConstructor
public class LombokTest{
private String test1;
public LombokTest(String test1){
this.test1 = test1;
}
}
이 때는 @NoArgsConstructor(force=true) 옵션을 이용해서 final 필드를 0, false, null 등으로 초기화를 강제로 시켜서 생성자를 만들 수 있습니다.
추가 작업을 필요로 하는 필드에 대한 생성자를 생성하는 애노테이션입니다.
초기화되지 않은 모든 final 필드, @NonNull로 마크되있는 모든 필드들에 대한 생성자를 자동으로 생성해줍니다.
@NonNull로 마크되있는 필드들은 null-check가 추가적으로 생성되며 @NonNull이 마크되어 있지만 파라미터에서 null 값이 들어온다면 생성자에서 NullPointerException이 발생합니다.
파라미터의 순서는 클래스에 있는 필드 순서에 맞춰서 생성됩니다.
순수 자바 코드
public class LombokTest{
private String test1;
private final String test2;
@NonNull
private String test3;
public LombokTest(String test2, @NonNull String test3){
if(test3 == null){
throw new NullPointerException("test3 is nonNull");
}else{
this.test2 = test2;
this.test3 = test3;
}
}
}
롬복 코드
@RequiredArgsConstructor
public class LombokTest{
private String test1;
private final String test2;
@NonNull
private String test3;
}
순수 자바 코드
public class LombokTest{
private String test1;
private String test2;
@NonNull
private String test3;
public LombokTest(String test1, String test2, @NonNull String test3){
if(test3 == null){
throw new NullPointerException("test3 is nonNull");
}else{
this.test1 = test1;
this.test2 = test2;
this.test3 = test3;
}
}
}
롬복 코드
@AllArgsConstructor
public class LombokTest{
private String test1;
private String test2;
@NonNull
private String test3;
}
위의 세 생성자 관련 애노테이션은 static factory를 만들 수 있는 옵션이 있습니다.
staticName이라는 옵션을 사용하면 생성자를 private로 생성하고 private 생성자를 감싸고 있는 static factory 메소드를 추가할 수 있습니다.
ex) @RequiredArgsConstructor(staticName="of")
순수 자바 코드
public class LombokTest{
private String test1;
private final String test2;
@NonNull
private String test3;
private LombokTest(String test2, @NonNull String test3){
if(test3 == null){
throw new NullPointerException("test3 is nonNull");
}else{
this.test2 = test2;
this.test3 = test3;
}
}
public static LombokTest of(String test2, @NonNull String test3){
return new LombokTest(test2, test3);
}
}
롬복 코드
@RequiredArgsConstructor(staticName="of")
public class LombokTest{
private String test1;
private final String test2;
@NonNull
private String test3;
}
static 필드들은 스킵됩니다.
파라미터의 순서는 클래스에 있는 필드 순서에 맞추서 생성하기 때문에 매우 주의해야 합니다.
-> 만약 클래스 필드의 순서를 바꾸었을 때 롬복이 자동적으로 생성자 파라미터 순서를 바꾸어 주기 때문에 주의하지 않으면 버그가 발생할 수 있다.
AccessLevel을 꼭 설정해주어야 합니다.