[JAVA] Lombok & Validation 정리 | 필수 어노테이션 가이드 📖 | @Getter / @Setter | @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

2025. 9. 21. 14:55·✏️공부/💡JAVA
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
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA] Record 🎥 | Record를 DTO로 사용하는 이유
  • [JAVA|DB] 동시성과 공유 자원 🗂️ | 꼬이지 않게 관리하는 법
  • [JAVA] ⚙️ 자료구조 : Heap | 간단 정리 및 삽입•삭제 과정 💬
  • [JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    프로그래머스 #JAVA
    프로그래머스
    트랜잭션
    S3
    GIT
    코딩테스트
    Java
    github
    baekjoon
    동시성제어
    Set
    자료구조
    알고리즘
    백엔드
    네트워크
    AWS
    map
    데브코스
    Stream
    자바
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA] Lombok & Validation 정리 | 필수 어노테이션 가이드 📖 | @Getter / @Setter | @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
상단으로

티스토리툴바