본문 바로가기

프로그래밍 정보&자료

Lombok 라이브러리의 기능들

 자바의 라이브러리인 Lombok은 프로그래머가 여러가지 편리한 기능을 사용할 수 있도록 도와준다. Getter/Setter 추가와 toString 추가, 생성자 추가의 기능은 학교 수업에서 배웠지만 다른 기능들은 무엇이 있는지 궁금하여 알아보았다.

 Lombok Project 홈페이지에 영어로 기능들이 설명되어있는데, 크게 Stable(안정적인) 기능과 Experimental(실험적인)기능으로 나뉘어져 있었다. 이 글에서는 안정적인 기능들에 대해서만 다루겠다.

 

1. val

 val은 변수의 타입을 명확하게 주지 않고 사용이 가능하게 한다. val로 생성한 변수는 final이므로 다른 값으로 초기화할 수 없다. ex) final String name = "JWKIM" => val name ="JWKIM"

 

2. var

 val의 기능과 똑같지만 하나 다른점으로 final이 아니어서 다른 값으로 초기화하는 것이 가능하다.

 

3. @NonNull

 @NonNull은 메소드나 생성자의 파라미터에 추가하여 null인지 아닌지를 체크하는 기능을 한다. 만약 @NonNull을 설정한 파라미터의 값이 null로 들어오면 NullPointerException을 발생시킨다.

 

4. @Cleanup

 close()가 필요한 경우 @Cleanup을 사용하면 close() 메소드가 없어도 알아서 close()해준다. ex) InputStream/OutputStream

 

5. @Getter / Setter

 특정한 변수에 대한 get메소드나 set메소드를 만들지 않고 @Getter나 @Setter를 적용하면 그 변수에 대한 get메소드나 set 메소드를 사용할 수 있다. 변수에 적용하면 적용 범위가 그 변수 뿐이지만 클래스에 적용하면 그 클래스의 변수들에 모두 적용된다.

 

6. @ToString

 해당 객체의 정보를 String으로 출력하는 toString() 메소드를 직접 만들지 않아도 사용할 수 있게 해준다.

 

7. @EqualsAndHashCode

 해당 객체와 동일한지 아닌지를 판단해주는 equal() 메소드와 해시값을 생성하는 hashCode() 메소드의 기능을 사용할 수 있게 해준다.

 

8. @????Constructor

 생성자를 사용할 수 있게 해주는 기능으로, NoArgs, RequiredArgs, AllArgs의 세 가지 종류가 있다. 이름에서 알 수 있겠지만 @NoArgsConstructor는 파라미터가 없는 생성자, @RequiredArgsConstructor는 특정한 파라미터를 받는 생성자, AllArgsConstructor는 모든 파라미터를 받는 생성자의 기능을 한다. 추가로 생성자의 접근제한자를 설정해줄 수도 있다. ex) @AllArgsConstructor(access = AccessLevel.PROTECTED)

 

9. @Data

 앞에서 설명한 기능들 중 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 설정한 것과 동일한 기능을 한다. 저 기능들이 필요하다면 @Data 하나만 적용하는 것으로 해결할 수 있다.

 

10. @Value

 @Data와 거의 동일하지만 모든 변수가 private, final이 되고, 이로 인해 setter 메소드가 없다는 차이가 있다.

 

11. @Builder

 해당 객체를 Builder 패턴으로 사용할 수 있게 한다.

 

12. @SneakyThrows

  @SneakyThrows를 사용하면 try/catch구문을 사용해 Exception을 잡지 않아도 된다. 파라미터로 어떤 Exception을 처리할지를 정해주거나, 파라미터를 쓰지 않고 throw하는 Exception을 처리할 수도 있다.

 

13. @Synchronized

 동기화를 할 때 사용되는 Synchronized 키워드를 사용한 것과 동일한 기능을 한다.

 

14. @With

 @Setter와 유사해 보이지만 객체를 리턴한다. 만약 파라미터로 받은 값이 이미 변수에 저장된 값과 동일하면 자기 자신(this)를 리턴하고, 다르면 파라미터로 받은 값을 제외한 모든 변수가 동일한 객체를 리턴한다. 설명만 들으면 이해하기 어려울 수도 있으니 다음의 코드를 참고하면 좋다.

15. @Log

 말 그대로 로그를 남겨주는 기능을 한다. @Log를 사용해도 되지만 @Log4j, @Log4j2, @Slf4j 등등 지원되는 다른 로그 라이브러리를 사용할 수도 있다.

 

https://projectlombok.org/

'프로그래밍 정보&자료' 카테고리의 다른 글

자바에서 다른 프로그래밍 언어 사용하기  (0) 2019.10.26
자바 Annotation  (0) 2019.10.20
자바 메모리 관련 자료  (0) 2019.10.13