728x90
반응형
📌 Lombok & Validation
: 필수 어노테이션 가이드
1. Lombok이란?
- 자바에서 반복적으로 작성해야 하는 보일러플레이트 코드를 어노테이션을 부여하는 것으로 자동 생성해주는 라이브러리
- 보일러플레이트 코드 : 최소한의 변경으로 여러 곳에서 재사용될 수 있는, 반복적이고 비슷한 형태의 코드를 의미
- getter/setter, toString, equals, 생성자, 빌더 패턴 등을 어노테이션 한 줄로 처리할 수 있음
➡️ 주로 Spring Boot + JPA 환경에서 많이 사용
2. Lombok 주요 어노테이션
✅ @Getter / Setter
- 각 필드에 대한 getter/setter 자동 생성
@Getter
@Setter
public class User {
private String name;
private int age;
}
// 직접 작성 시
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
✅ @NoargsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
- @NoArgsConstructor: 기본 생성자 자동 생성
- 매개변수가 없는 생성자
- JPA에서 Entity 클래스를 사용할 때 필수
@NoArgsConstructor
public class User {
private String name;
private int age;
}
// 직접 작성 시
public User() {}
- @AllArgsConstructor: 모든 필드를 받는 생성자 생성
- 클래스의 모든 필드를 파라미터로 받는 생성자
@AllArgsConstructor
public class User {
private String name;
private int age;
}
// 직접 작성 시
public User(String name, int age) {
this.name = name;
this.age = age;
}
- @RequiredArgsConstructor: final 또는 @NonNull 필드만 받는 생성자 생성
- final 또는 @NonNull 이 붙은 필드만 생성자의 파라미터로 포함
- 주로 Spring 의존성 주입에서 사용
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@NonNull private String serviceName;
private int count; // 생성자에서 제외
}
// 직접 작성 시
public UserService(UserRepository userRepository, String serviceName) {
this.userRepository = userRepository;
this.serviceName = Objects.requireNonNull(serviceName);
}
✅ 장점
- 불변성 보장 (final)
- null 안정성 확보 (@NonNull)
- 명시적이고 안전한 생성자
📍 모두 적용 시
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private String name;
private String email;
private int age;
}
// 직접 작성 시 (@NoArgsConstructor)
public User() {}
// 직접 작성 시 (@AllArgsConstructor)
public User(String name, String email, int age) {
this.name = name;
this.email = email;
}
// 직접 작성 시 (@RequiredArgsConstructor)
public User(@NonNull String name, final String email) {
this.name = Objects.requireNonNull(name);
this.email = email;
}
✅ @Data
- @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 포함
@Data
public class Post {
private String title;
private String content;
}
✅ @Builder
- 빌더 패턴 자동 생성
@Builder
public class User {
private String name;
private int age;
}
// 객체 생성
User user = User.builder()
.name("홍길동")
.age(30)
.build();
// 직접 구현 시 빌더 클래스, 내부 static Builder, build() 메서드까지 필요
✅ @Value
- 모든 필드를 private final로 선언 (불변 객체 생성)
- @Getter, @ToString, @EqualsAndHashCode, @AllArgsConstructor 포함
@Value
public class Point {
int x;
int y;
}
✅ @ToString
- toString() 자동 생성
- 특정 필드 제외 가능
@ToString(exclude = "password")
public class User {
private String username;
private String password;
}
// 직접 작성 시
@Override
public String toString() {
return "User(name=" + this.name + ", age=" + this.age + ")";
}
3. @Valid란?
- @Valid는 JSR-303 Bean Validation 표준 어노테이션으로,
- 컨트롤러에서 요청 객체를 받을 때 유효성 검사를 자동으로 수행합니다.
➡️ 주로 Spring MVC, Spring Boot 환경에서 사용
➡️ 작자는 swagger 작성시 검증을 위해 사용했음
@PostMapping("/users")
public ResponseEntity<String> createUser(@Valid @RequestBody UserRequest request) {
return ResponseEntity.ok("등록 성공");
}
✅ DTO 클래스에는 @NotNull, @Size, @Email 등 제약 조건을 붙임
public class UserRequest {
@NotNull
private String name;
@Email
private String email;
@Min(18)
private int age;
}
✅ 장점
- 수동 검증 로직( if문 ) 없이 자동으로 검증
- 실패 시 MethodArgumentNotValidException 발생 → ControllerAdvice에서 처리 가능
728x90
반응형
'✏️공부 > 💡JAVA' 카테고리의 다른 글
| [JAVA] Record 🎥 | Record를 DTO로 사용하는 이유 (0) | 2025.11.24 |
|---|---|
| [JAVA|DB] 동시성과 공유 자원 🗂️ | 꼬이지 않게 관리하는 법 (0) | 2025.11.13 |
| [JAVA] ⚙️ 자료구조 : Heap | 간단 정리 및 삽입•삭제 과정 💬 (5) | 2025.08.21 |
| [JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬 (0) | 2025.08.21 |
| [JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬 (0) | 2025.08.21 |
