<목차>
1. Lombok ?
2. 사용법 (인텔리제이)
3. 롬복 어노테이션
[Lombok]
Lombok(롬복)은 데이터 클래스를 생성할 때, 반복적으로 사용하는 메서드들을 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다.
일반적으로 많은 멤버 변수를 선언하고, 각 멤버 변수 별 getter() / setter() 메서드를 만들면 코드가 길어지고, 가독성이 낮아지곤 한다.
비록 IDE 자체적으로 getter() / setter() / toString() 메서드 등을 자동으로 생성하는 기능을 제공하긴 하지만, 앞서 언급한 단점은 마찬가지이다.
이런 경우 롬복을 활용하면, 아래와 같은 장점을 가질 수 있다.
- 어노테이션 기반으로 코드를 자동으로 생성하므로 생산성이 높아진다.
- 반복되는 코드를 생략할 수 있어 가독성이 좋아진다.
- 코드를 간단하게 유추할 수 있어 유지보수에 용이하다.
Project Lombok 공식 페이지
Project Lombok
projectlombok.org
[Lombok 사용법]
본 포스팅에서는, 아래 환경에서 롬복을 사용하는 방법에 대해 알아보겠다.
- intelliJ Community (인텔리제이 커뮤니티)
- Spring Boot ver. 2.7.18 / maven
- Lombok 플러그인 설치
[File] > [Settings] > [Plugins] > "lombok" 검색 > install
설치가 완료되었다면, Installed 탭에서 확인해보자.
라이브러리를 사용하는데, 왜 플러그인까지 설치를 해야하지? 라는 생각이 들 수 있다.
Lombok 플러그인을 설치하지 않으면 IntelliJ IDEA의 코드 편집기는 Lombok 어노테이션에 의해 생성된 메서드들을 인식하지 못하기 때문에 코드 자동 완성 기능이나 오류 검사 기능이 제대로 작동하지 않기 때문에, 설치를 하는게 좋다.
설치하지 않는다면, 빌드에는 문제가 없으나 코드 상에서는 오류 표시가 나타나게 된다.
2. 의존성 추가
maven 환경이므로, pom.xml 에 아래와 같이 추가가 필요하다.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
getter() / setter() 를 기준으로 설명해보겠다.
우선, Lombok 을 사용하지 않는다면 아래와 같이 IDE 의 기능을 활용해 getter() / setter() 와 같은 메서드를 포함하여, 생성자, toString() 등을 생성할 수 있다.
간단하게,
IDE기능을 활용하여 기본 생성자 / 모든 필드를 사용하는 생성자 / getter() / setter() / toString() 을 작성해보겠다.
4개의 필드만 가지고 있음에도 불구하고, 60줄이 넘는 코드가 필요하다.
public class LombokSampleDto {
private Long id;
private int number;
private String name;
private String email;
//기본 생성자
public LombokSampleDto() {
}
//모든 필드 생성자
public LombokSampleDto(Long id, int number, String name, String email) {
this.id = id;
this.number = number;
this.name = name;
this.email = email;
}
//Getter, Setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "LombokSampleDto{" +
"id=" + id +
", number=" + number +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
그렇다면 Lombok을 사용하면 어떻게될까?
매우 간단하고 한 눈에 들어온다.
아래와 같이 필드를 선언하고, 필요로하는 메서드의 종류에 대한 어노테이션만 작성하면 된다.
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class LombokSampleDto {
private Long id;
private int number;
private String name;
private String email;
}
[Lombok Annotation]
- @Getter, @Setter
- 클래스에 선언된 필드들에 대한 getter / setter 메서드를 생성한다.
- 생성자
- 클래스 초기화를 위한 생성자를 자동으로 만들어준다.
- NoArgsConstructor : 파라미터가 없는 생성자를 생성한다.
- AllArgsConstructor : 모든 필드를 매개변수로 갖는 생성자를 생성한다.
- RequiredArgsConstructor : 클래스의 필드들 중, final 이나 @NonNull 이 설정된 변수를 파라미터로 갖는 생성자를 생성한다.
- @ToString
- toString() 메서드를 자동으로 생성한다.
- exclude 속성을 사용하여, toString() 메서드에서 필드를 제외시킬 수 있다.
- ex ) @ToString(exclude="name")
- @EqualsAndHashCode
- 슈퍼클래스의 equals() 와 hashCode() 메서드를 오버라이딩하여 자동 생성한다.
- 객체의 동등성과 동일성을 비교하는 연산 메서드
- equals() : 두 객체의 내용이 같은지 '동등성'을 비교한다.
- hashCode() : 두 객체가 같은 객체인지 '동일성'을 비교한다.
- 동등성 : 비교 대상이 되는 두 객체가 가진 값이 같음을 의미
- 동일성 : 두 객체가 같은 객체임을 의미
- @Data
- @Getter / @Setter
- @RequiredArgsConstructor
- @ToString
- @EqualsAndHashCode
- 위 어노테이션을 모두 포괄하는 어노테이션
이 외에도, Lombok 프로젝트는 다양한 Stable 어노테이션을 제공하고 있으며, 지속적으로 새로운 실험적인(Experimental) 어노테이션도 제공하고 있다.
다양한 어노테이션 정보는 아래 페이지에서 확인 가능하다.
https://projectlombok.org/features/
Stable
projectlombok.org
'Java' 카테고리의 다른 글
[JAVA] 예외처리 - Exception 이해하기 (0) | 2024.08.15 |
---|