렴소네 블로그
Lombok 본문
자바로 프로젝트를 진행하다보면 Get, Set, Equals, ToString 등등 매번 비슷하고 반복적인 코드들을 작성하는 경우가 많다. 이러한 코드들은 Boilerplate(사전에서 검색해보면 표준문안, 각종 문서에 반복적으로 인용되는 문서의 한 부분이라고 한다)
이러한 Boilerplate들을 줄이기 위해서 나온게 Lombok 이다.
Lombok은 애노테이션만으로 자바에서 반복적으로 선언하는 Get, Set, null체크, toString, EqualsAndHashCode 등을 확 줄여준다.
( 출처 : 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 |