Lombok ( @RequiredArgsConstructor , @Synchronized, @Builder )

TopOfTheHead·2025년 10월 19일

Lombok

compileOnly 'org.projectlombok:lombok'

Javagetter, 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을 설정하는 어노테이션
    Javasynchronized를 쉽게 적용할 수 있게 설정
@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 지정 시 Settervoid 대신 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 메서드로 설정됨

profile
공부기록 블로그

0개의 댓글