LombokcompileOnly 'org.projectlombok:lombok'。
Java의getter,setter,생성자등을어노테이션선언을 통해 자동생성하는라이브러리
▶컴파일단계에서어노테이션을 통해 실제코드를 생성
▶boiler plate code방지
val:lombok.val
。var처럼타입추론기능을 제공하면서 동시에변수 재할당을 금지하는클래스
▶타입추론+불변성제공var test1 = "not edited"; test1 = "edited"; // 수정됨 val test2 = "not edited"; test2 = "edited"; // 오류 발생
Lombok에서 지원하는어노테이션
。주로@Getter와@RequiredArgsConstructor를 사용@Getter @Setter @AllArgsConstructor @RequiredArgsConstructor @NoArgsConstructor @ToString @Data public class LombokTester { private TesterPojo pojo; }▶
클래스수준에서 선언
@EqualsAndHashCode
。클래스의equals()와hashCode()자동구현
@NoArgsConstructor;
。클래스의 기본생성자만 생성하는 역할을 수행하는어노테이션
@NoArgsConstructor(access = AccessLevel.PROTECTED)
▶protected 클래스()의생성자를 생성
@RequiredArgsConstructor
。클래스의필드의 필요한매개변수의생성자만 생성하는 역할을 수행하는어노테이션
▶private final을 선언한field에 대해 자동으로의존성주입을 수행
@AllArgsConstructor:
。클래스의필드의 모든매개변수를 가지는생성자모두를 생성하는 역할을 수행하는어노테이션
@ToString
。클래스의toString()자동 생성
@Getter/@Setter:
。클래스의필드별getter,setter를 자동생성
@Data:
。클래스의getter/setter/toString/equalsAndHashCode/RequiredArgsConstructor의어노테이션을 한번에 적용
▶@Setter까지 구현하므로 지양하는게 좋다.
@Asynchroized
。메서드 레벨에서 적용하여 자동으로Synchronized Lock을 설정하는어노테이션
▶Java의synchronized를 쉽게 적용할 수 있게 설정@Synchronized void method() { // 메서드 내용 }。
this가 아닌 별도의Lock 객체를 생성하여락을 설정
▶ 외부에서 접근이 불가능하여 안전한동기화기능 제공// @Synchronized 실행 시 Lombok에서 컴파일 단계에서 다음으로 변경 private final Object $lock = new Object(); // public void test() { synchronized ($lock) { // 작업 } }
@Builder
。클래스의생성자를Builder 패턴으로서메소드 체이닝을 통해 생성하도록 설정 시 선언하는어노테이션@Getter public class User { private String name; private int age; private String email; @Builder public User( String name, int age, String email ){ this.age = age; this.email = email; this.name = name; } }User user = User.builder() .name("홍길동") .age(20) .email("test@test.com") .build();
@Accessors
。Getter / Sertter의 생성 방식을 커스터마이징하는 기능
@Accessors(chain = true)
。@Setter지정 시Setter를void대신this를 반환하도록 설정.@Setter @Accessors(chain = true) public class User { private String name; private int age; }public User setName(String name) { this.name = name; return this; } public User setAge(int age) { this.age = age; return this; }▶ 다음처럼
this를 반환하는setter 메서드로 설정됨