Lombok
은 도메인 개발시 불필요한 코드의 사용을 줄여주고 강력한 기능을 제공하여 줍니다. 그만큼 잘 알고 써야 하는 것이 맞고 개인적으로는 잘 사용하지 못할것 같으면 사용을 하지 말고 직접 개발하는 것이 맞다고 생각합니다. 그래서 잘 사용하기 위해서 하나씩 정리해보려고 합니다.
자바로 개발을 진행하면서 생성자를 통하여 많은 내용을 진행하게 됩니다. Lombok
에서는 생성자를 생성하여 주는 기능 또한 제공하여 주는데 다음과 같은 어노테이션을 제공합니다.
@NoArgsConstructor
: 기본 생성자를 만드는데 사용합니다.@AllArgsConstructor
: 모든 필드의 생성자를 만드는데 사용합니다.@RequiredArgsConstructor
: 필수 생성자를 만드는데 사용합니다.
각각의 기본 사용법에 대해서 알아보도록 하겠습니다.
@NoArgsConstructor
기본 사용법은 다음과 같습니다.
@NoArgsConstructor
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
}
자바로 표현하면 다음과 같습니다.
public class BookWithOutLombok {
private Long id;
private String isbn;
private String name;
private String author;
public BookWithOutLombok() {
}
}
@AllArgsConstructor
기본 사용법은 다음과 같습니다.
@AllArgsConstructor
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
private boolean useYn;
}
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
private boolean useYn;
public BookWithLombok(final Long id, final String isbn, final String name, final String author, final boolean useYn) {
this.id = id;
this.isbn = isbn;
this.name = name;
this.author = author;
this.useYn = useYn;
}
}
@RequiredArgsConstructor
기본 사용법은 다음과 같습니다.
@RequiredArgsConstructor
public class BookWithLombok {
private final Long id;
private final String isbn;
private final String name;
private final String author;
private boolean useYn;
}
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private final Long id;
private final String isbn;
private final String name;
private final String author;
private boolean useYn;
public BookWithLombok(final Long id, final String isbn, final String name, final String author) {
this.id = id;
this.isbn = isbn;
this.name = name;
this.author = author;
}
}
기본 사용법은 알아보았습니다.
각 세부 옵션에 대해서 알아보도록 하겠습니다. 세부 옵션은 다음과 같습니다.
staticName
: 정적 팩토리 메소드를 생성합니다.access
: 접근제한자를 지정합니다.onConstructor
: 생성자의 어노테이션을 지정합니다.
staticName - 정적 팩토리 메소드 생성
사용법은 다음과 같습니다.
@NoArgsConstructor(staticName = "of")
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
}
자바로 표현하면 다음과 같습니다.
정적 팩토리 메소드인 of
를 생성하고 내부 기본 생성자 생성을 위해서 pirvate
으로 호출하게 됩니다.
public class BookWithOutLombok {
private Long id;
private String isbn;
private String name;
private String author;
private BookWithOutLombok() {
}
public static BookWithOutLombok of() {
return new BookWithOutLombok();
}
}
access - 접근제한자
생성자의 대해서 접근제한자를 지정할 수 있습니다. 기본 접근제한자는 public
입니다.
접근제한자 목록은 다음과 같습니다.
PUBLIC
모든 곳에서 접근 가능합니다.
다음과 같이 사용할 수 있습니다.
@NoArgsConstructor(access = AccessLevel.PUBLIC)
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
public BookWithLombok() {
}
}
MODULE
같은 패키지내에서 접근 가능합니다.
다음과 같이 사용할 수 있습니다.
@NoArgsConstructor(access = AccessLevel.MODULE)
자바로 표현하면 다음과 같습니다.default
와 동일하며 같은 Lombok에서는 package
와 동일합니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
BookWithLombok() {
}
}
PROTECTED
같은 패키지 또는 자식 클래스에서 사용할 수 있습니다.
다음과 같이 사용할 수 있습니다.
@NoArgsConstructor(access = AccessLevel.PROCTECTED)
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
protected BookWithLombok() {
}
}
PACKAGE
같은 패키지안에서 접근 가능하며 MODULE
과 동일한 기능을 합니다.
다음과 같이 사용할 수 있습니다.
@NoArgsConstructor(access = AccessLevel.PACKAGE)
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
BookWithLombok() {
}
}
PRIVATE
내부 클래스에서만 사용할 수 있습니다.
다음과 같이 사용할 수 있습니다.
@NoArgsConstructor(access = AccessLevel.PRIVATE)
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
private BookWithLombok() {
}
}
NONE
기본값인 PUBLIC
과 동일합니다.
다음과 같이 사용할 수 있습니다.
@NoArgsConstructor(access = AccessLevel.NONE)
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
public BookWithLombok() {
}
}
어노테이션 생성 - AnyAnnotation
생성자의 어노테이션을 붙일 수 있습니다.
다음과 같이 사용할 수 있습니다.
@AllArgsConstructor(onConstructor_={@Builder})
public class BookWithLombok {
private Long id;
private String isbn;
private String name;
private String author;
private boolean useYn;
}
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private final Long id;
private final String isbn;
private String name;
private String author;
private final boolean useYn;
public BookWithLombok(final Long id, final String isbn, final String name, final String author, final boolean useYn) {
this.id = id;
this.isbn = isbn;
this.name = name;
this.author = author;
this.useYn = useYn;
}
}
force - @NoArgsConstructor만 해당
final
필드가 선언된 경우 컴파일 타임에 기본값을 0 / null / false 로 설정합니다.
다음과 같이 작성할 수 있습니다.
@NoArgsConstructor(force = true)
public class BookWithLombok {
private final Long id;
private final String isbn;
private String name;
private String author;
private final boolean useYn;
}
자바로 표현하면 다음과 같습니다.
public class BookWithLombok {
private final Long id = null;
private final String isbn = null;
private String name;
private String author;
private final boolean useYn = false;
public BookWithLombok() {
}
}
- 기본값이 null인 필드는 null로 초기화합니다.
- 기본값이 0인 필드는 0으로 초기화합니다.
- 기본값이 boolean 필드는 false로 초기화합니다.
장점
- 잘 사용하면 중복되는 코드들을 줄일 수 있어서 간결하게 코드를 작성할 수 있습니다.
단점
- 어노테이션 기반이다보니 코드의 가독성면에서 좋지 않을 수 있습니다.
- @AllArgsConsturctor, @RequiredArgsConstructor의 필드 순서 변경 시 문제 발생
'프로그래밍이야기 > Java' 카테고리의 다른 글
[자료구조론] Stack 정리 (0) | 2022.04.10 |
---|---|
[Java] 상수를 활용하자 (0) | 2022.03.20 |
[객체지향] OCP 적용 정리 (0) | 2022.01.23 |
[Item6] 불필요한 객체를 생성하지 마라 (0) | 2022.01.05 |
[Java] Enum의 활용 (0) | 2020.05.22 |
댓글