2023. 12. 2. 22:28ㆍJava/Lombok
Lombok (롬복) 은 DTO (data transfer object), VO (view object) - 그게 그거다. 활용 목적에 따라 명칭만 다를 뿐 - 를 만들 때 자바 POJO 코드 안에 필드에 대한 getter 와 setter 를 일일이 지정하지 않아도 필요에 따라 자동으로 생성해주는 고마운 라이브러리이다. 일반적으로 스프링 프레임워크에서 @Getter, @Setter 가 흔히 활용되는 편이다.
본 게시물에서는 개인적으로 접해보지 못한 @AllArgsConstructor 와 @Builder 를 다루려고 한다.
@AllArgsConstructor
이름에 Constructor 가 붙어 있듯이 생성자를 통해 필드값을 설정하는 방식이다.
이것과 유사한 @RequiredArgsConstructor 도 있는데 @NotNull 또는 final 예약어가 지정된 필드에 대한 getter, setter 만 생성하는 점이 다르다.
VO.java :
import lombok.AllArgsConstructor;
@AllArgsConstructor(staticName = "of")
public class VO {
String student;
String department;
@Override
public String toString() {
return "VO{" +
"student='" + student + '\'' +
", department='" + department + '\'' +
'}';
}
}
테스트 코드 :
VO newVo = VO.of("홍길동", "컴퓨터공학");
System.out.println("VO => " + newVo);
실행결과 :
VO => VO{student='홍길동', department='컴퓨터공학'}
@Builder
마치 StringBuilder (및 StringBuffer) 의 append() 를 연속으로 활용하듯 VO 의 생성자에서 필드명과 동일한 메서드로 필드값을 설정할 수 있는 흥미로운 방식이다. 생성자 함수 위에 @Builder 를 지정해서 쓴다.
VO2.java :
public class VO2 {
String student;
String department;
@Builder
VO2(String student, String department) {
this.student = student;
this.department = department;
}
@Override
public String toString() {
return "VO2{" +
"student='" + student + '\'' +
", department='" + department + '\'' +
'}';
}
}
테스트 코드 :
VO2 vo2 = VO2.builder().student("고길동").build();
System.out.println("VO2 => " + vo2);
VO2 vo22 = VO2.builder().student("고길동").department("사회확과").build();
System.out.println("VO22 => " + vo22);
실행결과 :
VO2 => VO2{student='고길동', department='null'}
VO22 => VO2{student='고길동', department='사회확과'}
참고한 문서 :
How To Use @AllArgsConstructor Annotation With Project Lombok In Java Applications
@AllArgsConstructor annotation automatically generates a constructor with a parameter for each field in your class.
stevenmwesigwa.com
자주 사용되는 lombok, 주의 사항 | devk0ng's blog
@Getter, @Setter : 말그대로 getter, setter method를 생성해주는 놈이야! AccessLevel을 명시해줌으로써 접근제한자를 지정 해 줄 수 있어. 123456789public Class Sample { @Getter private String attr1; @Getter(AccessLevel.PRIVATE)
devk0ng.github.io