렴소네 블로그

Lombok 본문

Java

Lombok

렴소 2017. 1. 26. 13:51

자바로 프로젝트를 진행하다보면 Get, Set, Equals, ToString 등등 매번 비슷하고 반복적인 코드들을 작성하는 경우가 많다. 이러한 코드들은 Boilerplate(사전에서 검색해보면 표준문안, 각종 문서에 반복적으로 인용되는 문서의 한 부분이라고 한다)


이러한 Boilerplate들을 줄이기 위해서 나온게 Lombok 이다.


Lombok은 애노테이션만으로 자바에서 반복적으로 선언하는 Get, Set, null체크, toString, EqualsAndHashCode 등을 확 줄여준다.Image illustrating the availability of new methods on a data class in Eclipse.

( 출처 : http://jnb.ociweb.com/jnb/jnbJan2010.html )

@Data 애노테이션 하나로 Boilerplate 들을 한번에 생성한 모습이다.


그럼 제공하는 애노테이션들을 하나씩 정리해보자.

@Getter and @Setter

Get과 Set 메서드를 한벙에 생성해준다

@NonNull

fast-fail null check 기능을 제공, Set할때 간단한 null check 를 제공한다.

@ToString

필드 있는 값들을 출력해준다. 필드의 명을 출력하고 싶지않다면 includeFieldNames을 false로 주면 되고. 제외시키고 싶은 필드는 exclude 파라미터에 추가하면된다. 아니면 반대로 of 파라미터를 이용하여 원하는 필드만 출력할 수 도 있다. 부모 클래스의 toString을 출력하고 싶은 경우에는 callSuper 파라미터를 true로 설정하여 포함시킬 수도 있다.

@EqualsAndHashCode

equals와 hashcode 메서드를 제공한다. toString과 마찬가지로 exclude 와 of 파라미터를 제공한다.

@Data

lombok 에서 가장 자주 쓰일 애노테이션이다 .@ToString, @EqualsAndHashCode, @Getter and @Setter.를 자동으로 생성한다. 이걸 사용하면 @NonNull 또는 final 필드를 매개변수로 사용하는 public 생성자가 생성되고 자바의 POJO 에 필요한 모든게 제공된다. @Data는 staticConstructor 하나의 파라미터 옵션만 제공하는데, 파라미터를 이름으로 하는 static factory 메서드를 생성하여 준다. 

@Cleanup

try/finally 구문을 완성해준다. value 파라미터를 주지않으면 기본적으로 close메소드를 호출하고 value 파라미터가 있으면 해당 이름의 메소드를 호출한다.

@Synchronized

자바의 synchronized를 사용할 때 deadlock이 발생하는 경우가 종종 발생하는걸 방지하기 위해 Lombok이 메소드가 실행되기 전에 잠글 $ lock이라는 개인 잠금 필드를 생성한다. 마찬가지로, static 메소드에 주석을 붙이면 같은 방식으로 사용할 정적 메소드에 대해 $ LOCK이라는 전용 static 객체가 생성된다. 애노테이션의 value 파라미터에 필드 이름을 제공하여 다른 잠금 객체를 지정할 수 있다. 필드 이름이 제공되면 개발자는 Lombok에서 속성을 생성하지 않으므로 속성을 정의해야한다

@SneakyThrows

'Java' 카테고리의 다른 글

Java 면접때 자주 하는 질문들 정리...옛날꺼  (0) 2019.01.08
java의 괄호들  (1) 2017.02.28
객체지향 설계의 5원칙(SOLID)  (0) 2017.02.02
Spring Framework 기본 개념 정리  (0) 2017.02.02