-
[JAVA] Lombok과 자주사용하는 어노테이션JAVA 2022. 7. 6. 14:31
이번에 새로운 프로젝트를 준비하며 통일된 소스 템플릿을 만들기위해 여러 어노테이션과 Lombok 개념에 대해 공부 한 내용을 정리해보려 한다.
Lombok이란?
롬복이란 JAVA의 라이브러리를 통해 자주 사용하는 메소드를 Annotation을 사용해서 자동으로 완성해주는 라이브러리이다. 일반적으로 VO안에 선언되어있는 private 변수들의 getter, setter, 생성자 등을 매번 작성하지만 Lombok을 사용하여 자동완성 한다고 생각하면 된다.
Lombok의 장점
- 반복되는 코드를 어노테이션으로 생략하기 때문에 생산성이 향상된다.
- 코드의 축소로 가독성 및 유지보수에 효율적이다.
Lombok의 단점
- 코드를 축소시키기 때문에 직관성이 떨어진다.
- 기능을 숙지하지 않으면 예상치 못한 에러가 발생할 수 있다.
사용법
@Getter, @Setter
이 두개의 어노테이션의 사용법을 보면
//use Lombok public class LobomkTest { @Getter @Setter private String responseData; } //non_use Lombok public class LobomkTest { private String responseData; public String getResponseData() { return responseData; } public void setResponseData(String responseData) { this.responseData = responseData; } }
차이점이 눈의 확 보인다. 반복되는 getter, setter의 기능을 어노테이션으로 줄여준다.
또한 어노테이션을 클래스 레벨에 명시 할 수 도있다. 그렇게되면 non-static 필드에 대해 getter, setter를 생성해준다.
@Getter @Setter public class LobomkTest { private String responseData; private String responseCode; }
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
@NoArgsConstructor
이 어노테이션은 매개변수가 없는 생성자를 만들어준다. final과 같은 이유로 불가능하다면 컴파일 에러가 발생한다. @NoArgsConstructor(force = true)를 사용하면 final필드는 기본값(0, false, null)로 초기화 된다.
@RequiredArgsConstructor
초기화되지 않은 모든 final 필드, @NonNull 필드에 대한 생성자를 만들어준다. @NonNull 필드는 null check구문 또한 만들어준다.
@RequiredArgsConstructor(staticName = "of")와 같이 사용하면 MapEntry.of("name", value) 와 같은 staticFactory를 만들어 준다. (아직 이해가 잘 안되네요...)@AllArgsConstructor
모든 필드에 대한 생성자를 만들어준다. @NonNull 필드에 대해선 동일하게 null check구문을 만들어준다.
// use Lombok @AllArgsConstructor @RequiredArgsConstructor(staticName = "from") class Person{ final private String name; private int age; @NonNull private String school; } // non_use Lombok class Person { private final String name; private int age; @NonNull private String school; public Person(final String name, final int age, @NonNull final String school) { if (school == null) { //null check throw new NullPointerException("school is marked non-null but is null"); } else { this.name = name; this.age = age; this.school = school; } } private Person(final String name, @NonNull final String school) { if (school == null) { //null check throw new NullPointerException("school is marked non-null but is null"); } else { this.name = name; this.school = school; } } public static Person from(final String name, @NonNull final String school) { return new Person(name, school); } }
@Data
모든 필드에 대해 @ToString, @EqualAndHashCode, @Getter와 non-final 필드에 대해 @Setter를 설정해주며 @RequireArgsConstructor를 설정해주는 어노테이션이다.
@Builder
빌더를 자동으로 작성해주며 클래스 레벨에 작성하면 모든 필드에 대해 builder를 생성해준다. 원하는 필드에 대해서만 사용하고 싶은경우는 필드에 명시해주면 된다.
(Builder에 대해선 다음에 한번 더 다루기로 하겠다.)이러한 Lombok 어노테이션들을 통해 프로젝트의 API 패턴을 일관성 있게 만들도록 고민 좀 해봐야겠다.
※ 수정이 필요한 내용에 대해선 댓글 남겨주시면 수정토록 하겠습니다.
'JAVA' 카테고리의 다른 글
DTO vs VO (0) 2025.04.16 [JAVA] IO스트림 이란? / InputStream, OutputStream (0) 2022.08.20