Lombok이 뭐지?

뚜시뚜시·2020년 3월 31일
0

2020-03-18 Lombok이 뭐지?


학원에서 배울 때, Lombok을 설치하여 spring boots와 연동을 해줬다. 이때, 이 롬복에 대해서 제대로 이해하고 한 것이 아니기 때문에 무엇인지 궁금해졌다.

롬복이란?

롬복(Lombok)은 자바에서 Model(DTO, VO, Domain) Object 를 만들때, 멤버필드(프로퍼티)에 대한 Getter/Setter, ToString과 멤버필드에 주입하는 생성자를 만드는 코드 등 불필요하게 반복적으로 만드는 코드를 어노테이션을 통해 줄여 주는 라이브러리

출처
[Java] 소스 다이어트! Lombok 어노테이션


3.1 @Data

[ 롬복 적용 하기 전 ]

    // 생성자와 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;
        }
    }

[ @Data적용 후 ]

    public @Data class ExampleVO {
        private final String name;
        private int age;
    }



3.2 @Builder

다수의 필드를 가지는 복잡한 클래스의 경우, 생성자 대신에 빌더를 사용하는 경우가 많다.

빌더 패턴을 직접 작성해보면 코딩량이 의외로 상당함을 깨닫게 되는데 이 때,

@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])



3.3 @NonNull

@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 등)

등등.



Lombok Annotation 참고자료




profile
ddusi ddusi

0개의 댓글