(no, all, required)ArgsConstructor차이를 알아보자

지혜·2025년 2월 6일

Lombok에서 제공하는 어노테이션 @RequiredArgsConstructor,@AllArgsConstructor,@NoArgsConstructor 클래스의 생성자를 자동 생성해주는 공통점이 존재한다.

@RequiredArgsConstructor

  • final 등 변경할 수 없는 필드의 생성자를 자동으로 생성
public class Member{

    private Long id; // 변환 가능한 변수이므로 생성자 생성x
    private final String username;
    private final String email;

// @RequiredArgsConstructor 사용시 생략가능
    public Member(String username, String email) {
        this.username = username;
        this.email = email;
    }
}

@AllArgsConstructor

  • 모든 필드의 생성자를 자동으로 생성
  • final 여부와 관계 없음
public class Member{

    private Long id; // 변환 가능한 변수이므로 생성자 생성x
    private final String username;
    private final String email;

// @AllArgsConstructor 사용시 생략가능
    public Member(Long id ,String username, String email) {
    	this.id = id;
        this.username = username;
        this.email = email;
    }
}

@NoArgsConstructor

  • 기본 생성자자동으로 생성
  • 매개변수가 없는 기본 생성자를 생성
public class Member{

    private Long id; // 변환 가능한 변수이므로 생성자 생성x
    private String username;
    private String email;

// @NoArgsConstructor 사용시 생략가능
    public Member() {
    }
}

💡 @NoArgsConstructor 사용시 주의사항

final 필드가 포함되어 있는 경우 초기화가 되지 않으므로 오류 발생!
따라서 final이 존재할 경우 @NoArgsConstructor(force = true)를 사용하여 강제 초기화가 필요함

@NoArgsConstructor(force = true)
public class Member{

// null로 초기화
    private final String username;
    private final String email;
   
}

0개의 댓글