2020-03-18 Lombok이 뭐지?
학원에서 배울 때, Lombok을 설치하여 spring boots와 연동을 해줬다. 이때, 이 롬복에 대해서 제대로 이해하고 한 것이 아니기 때문에 무엇인지 궁금해졌다.
롬복(Lombok)은 자바에서 Model(DTO, VO, Domain) Object 를 만들때, 멤버필드(프로퍼티)에 대한 Getter/Setter, ToString과 멤버필드에 주입하는 생성자를 만드는 코드 등 불필요하게 반복적으로 만드는 코드를 어노테이션을 통해 줄여 주는 라이브러리
출처
[Java] 소스 다이어트! Lombok 어노테이션
// 생성자와 Getter, Setter가 있음.
// VO에 변수가 추가될 때 마다 Getter, Setter도 추가해줘야함
// ToString 도 마찬 가지로 추가해 줘야 한다.
public class ExampleVO {
private final String name;
private int age;
public SimpleVO(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "name=" + name + ", age=" + age;
}
}
public @Data class ExampleVO {
private final String name;
private int age;
}
다수의 필드를 가지는 복잡한 클래스의 경우, 생성자 대신에 빌더를 사용하는 경우가 많다.
빌더 패턴을 직접 작성해보면 코딩량이 의외로 상당함을 깨닫게 되는데 이 때,
@Builder 어노테이션을 사용하면 자동으로 해당 클래스에 빌더를 추가해주기 때문에 매우 편리하다.
@Builder
public class User {
private Long id;
private String username;
@Singular
private List<Integer> score;
}
컬렉션으로 된 필드에는 @Singular 어노테이션을 선언해주면 모든 원소를 한 번에 넘기지 않고 원소를 하나씩 추가할 수 있습니다.
User user = User.builder()
.id(1004)
private int age;
.username("god")
.score(70)
.score(80)
.build();
// User(id = 1, username = god, scores=[70,80])
@NonNull 어노테이션을 변수에 붙이면 자동으로 null 체크를 해준다. 해당 변수가 null로 넘어온 경우, NullPointerException 예외가 발생함.
@NonNull @Setter
private String id;
사용예
obj.setId(null); // NullPointerException 발생
@Cleanup : 자동 리소스 관리 : close() 메소드를 귀찮음 없게 안전하게 호출
@Value : 불변 클래스를 쉽게 생성
@SneakyThrows : Exception 발생시 체크된 Throable로 감싸서 전달
@Synchronized : 메소드에서 동기화 Lock을 설정
@Getter(lazy=true) : 동기화를 이용하여 최초 1회만 getter가 호출
@Log : 종류별 로그를 사용할 수 있도록 한다. (@Log, @Slf4j, @CommonLog 등)
등등.
공식 홈페이지 : https://projectlombok.org/index.html
Reference Doc : https://projectlombok.org/features/index.html
플러그인 안내 : https://plugins.jetbrains.com/androidstudio/plugin/6317-lombok-plugin