Lombok 활용

2023. 12. 2. 22:28Java/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