JPA 를 하며 Entity 에 수 많은 어노테이션을 달면서 느낀 점이
내가 이걸 다 알고 사용하는 것은 맞을까? 였다.
Lombok 은 불필요한 코드와 작업을 줄여주는 Spring 을 사용하면서 정말 필수적인 라이브러리지만 그 원리와 사용해야할 때를 제대로 파악하지 못하고 사용한다면 코드를 분석하는 입장에서는 혼동을 줄 수 있고 필요없는 동작을 시행하여 효율적인 코딩하는데 좋은 방법은 아니다.
우선 생성자를 생성하는 @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor 의 개념에 대해서 알아보자
@NoArgsConstructor
이 어노테이션은 매개변수 (Args) 가 없는 생성자 (Constructor) 를 자동으로 생성한다. 그러나 만약 (final 필드가 존재할 경우) 이 생성자를 생성할 수 없다면 컴파일과정에서 오류를 뱉을 것이다. 또한 @NonNull 같은 제약조건이 있는 필드에 대해 체크를 생성하지 않으므로 이러한 제약 조건은 해당필드가 나중에 올바르게 초기화될 때까지 일반적으로 충족되지 않을 수 있다. 이는 해당 필드가 나중에 올바르게 초기화될 떄까지 일반적으로 충족되지 않을 수 있다. 하이버네이트와 같은 서비스 제공자 인터페이스는 매개변수가 없는 생성자를 필요로 하는데 이 때 @Data 또는 다른 생성자 어노테이션과 함꼐 사용 할 수 있다.
요약 : 매개변수가 없는 생성자 자동생성
사용 예 :
import lombok.NoArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor // 자동 생성된 기본 생성자
public class User {
private Long userId;
private String userName;
private String email;
// 추가 필드와 메소드 생략
}
<생성자 예시>
public User() {
// 기본 생성자, 특별한 동작이 필요 없으므로 비워둘 수 있다.
}
<사용 예시>
public class Main {
public static void main(String[] args) {
User user = new User(); // 기본 생성자를 활용하여 객체 생성
user.setUserId(1L);
user.setUserName("John Doe");
user.setEmail("john.doe@example.com");
// 사용자 정보 출력
System.out.println(user.getUserName());
}
}
@RequiredArgsConstructor
이 어노테이션은 특별한 처리가 필요한 각 필드마다 1개의 매개변수를 생성하는 생성자를 생성한다. 초기화되지 않은 final 필드는 매개변수로 받고 @NonNull로 표기된 필드 중 초기화 되지 않은 필드도 매개변수로 받는다. @NonNull 로 표기된 필드에 대해서는 명시적인 null 체크도 생성이 된다. 이 생성자는 @NonNull 로 표기된 필드가 null 인 경우에 NullPointException 을 던진다. 매개변수의 순서는 클래스 내의 필드가 나타나는 순서와 일치한다.
요약 : 특정 필ㄷ그를 초기화하는 생성자를 자동 생성 주로 final 필드나 required 필드 생성자 간편 생성 하는 데 사용
사용 예 :
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor // 자동 생성된 생성자
public class UserService {
private final UserRepository userRepository; // final 필드
public void createUser(User user) {
userRepository.save(user); // 사용자 저장 로직
}
}
<생성자 예시>
public UserService(UserRepository userRepository) {
this.userRepository = userRepository; // 주입받은 필드 초기화
}
@AllArgsConstructor
이 어노 테이션은 클래스 내의 모든 필드마다 1개의 매개변수를 생성하는 생성자를 생성한다. @NonNull 로 표기된 필드는 해당 매개변수에 대한 null 체크를 생성한다. 이러한 어노테이션은 생성자를 항상 private 으로 만든다.
요약 : 모든 필드에 대한 매개변수를 가진 생성자를 자동으로 생성
사용 예 :
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor // 자동 생성된 생성자
public class User {
private final Long userId;
private final String userName;
private final String email;
// 추가 필드와 메소드 생략
}
<생성자 예시>
public User(Long userId, String userName, String email) {
this.userId = userId;
this.userName = userName;
this.email = email;
}
<사용 예시>
public class Main {
public static void main(String[] args) {
User user = new User(1L, "John Doe", "john.doe@example.com");
System.out.println(user.getUserName());
}
}
'BE > Java' 카테고리의 다른 글
Interceptor 인터셉터 / Filter 필터 / AOP 의 차이점 (0) | 2025.04.18 |
---|---|
Filter 와 AOP 를 활용하여 로그 패턴 만들기 (0) | 2025.04.16 |
yml ? properties? (0) | 2024.05.23 |
Spring Annotation - @RequiredArgsConstructor (0) | 2024.05.09 |
Spring Security 6.1 이상 csrf 설정 방법 (0) | 2024.03.27 |