Lombok을 프로젝트의 의존성으로 추가하면,
해당 라이브러리에서 제공하는 어노테이션을 사용할 수 있게 된다.
이를 통해 많은 boilerplate 코드( 반복되는 코드)를 줄일 수 있다.
@RequiredArgsConstructor, @NoArgsConstructor, @AllArgsConstructor는 예시를 들어 알아보았다.
아래와 같은 HotelRequestDto 클래스가 있다고 가정해보자.
@Getter
public class HotelRequestDto {
private String name;
private String type;
private String address;
private String contact;
private String email;
private int star;
private String description;
private int minPrice;
private int maxPrice;
private int rooms;
}
@AllArgsConstructor
모든 필드에 대한 생성자를 자동으로 생성한다.
public HotelRequestDto(String name, String type, String address, String contact, String email, int star, String description, int minPrice, int maxPrice, int rooms) {
this.name = name;
this.type = type;
this.address = address;
this.contact = contact;
this.email = email;
this.star = star;
this.description = description;
this.minPrice = minPrice;
this.maxPrice = maxPrice;
this.rooms = rooms;
}
@NoArgsConstructor
매개변수가 없는 기본 생성자를 자동으로 생성한다.
public HotelRequestDto() {
// 기본 생성자
}
@RequiredArgsConstructor
final 또는 @NonNull로 표시된 필드만 포함하는 생성자를 자동으로 생성한다.
주로 필수적으로 값을 가져야하는 필드에 대한 생성자를 만들 때 사용된다.
현재 HotelRequestDto 클래스에는 final 또는 @NonNull로 선언된 필드가 없으므로,
만약 다음과 같이 final 필드가 있다고 가정한다면
@RequiredArgsConstructor는 기본 생성자와 같이 동작합니다.
@Getter
public class HotelRequestDto {
private final String name;
//... 나머지 필드
}
public HotelRequestDto(String name) {
this.name = name;
}
@Data
Lombok 라이브러리에서 제공하는 어노테이션 중 하나이다.
하나로 여러가지 기능을 한 번에 사용할 수 있게 해준다.
@Data를 클래스에 붙이면 아래와 같은 것들이 자동으로 적용된다.
아래의 5가지 기능은 @Data 어노테이션이 주로 포함하는 핵심적인 기능들이다.
1. @Getter
모든 필드에 대한 getter 메서드를 생성한다.
2. @Setter
모든 필드에 대한 setter 메서드를 생성한다.
3. @ToString
클래스의 문자열 표현을 제공하는 toString() 메서드를 생성한다.
주로 모든 필드의 내용을 포함한 문자열을 반환하게 된다.
4. @EqualsAndHashCode
객체 간의 동등성 비교를 위한 equals()와 hashCode() 메서드를 생성한다.
5. @RequiredArgsConstructor
초기화되지 않은 final필드나 @NonNull 어노테이션이 붙은 필드만을 파라미터로 받는 생성자를 생성한다.
@Data 어노테이션 하나로 위에 언급된 다양한 기능을 모두 사용할 수 있게 된다.
반복적인 코드 작성을 피할 수 있어 개발의 편의성이 크게 향상된다.
하지만,
@Data는 너무 많은 것을 한번에 제공하기 때문에
실제로 필요하지 않은 메서드까지 자동으로 생성될 수 있다.
따라서 꼭 필요한 기능만을 사용하고자 할 때는 개별 어노테이션을 사용하는 것이 더 좋을 수 있다.
무분별한 사용은 클래스의 의도를 파악하기 어렵게 만들 수 있으므로 적절한 상황에서만 사용하는 것이 좋다.
* 개인 공부하며 기록 중입니다.
'개인 공부 (23.07~' 카테고리의 다른 글
[JAVA] 다형성, 동적 바인딩 예시 (0) | 2023.10.08 |
---|---|
필터, 인터셉터, AOP 개념, 사용법 (0) | 2023.09.24 |
[JPA] dirty checking 더티체킹 간단 이해 (0) | 2023.09.09 |
[JAVA] Logging Framework / Slf4j (0) | 2023.09.08 |
[DB] 이상현상, 정규화, 정규화 단계, 반정규화 (0) | 2023.09.07 |