Lombok 생성자를 만들어주는 애노테이션
- Lombok 기능 중에 생성자를 만들어주는 애노테이션이 있다. 파라미터가 있는지 없는지를 기준으로 기능이 3가지로 만들어진다.
- @NoArgsConstructor: 파라미터 없는 생성자 생성
- @RequiredArgsConstructor: 파라미터 있는 생성자 생성(final or @NonNull인 필드)
- @AllArgsConstructor: 파라미터 있는 생성자(모든 필드)
@NoArgsConstructor
- 파라미터가 없는 생성자를 생성해준다.
@NoArgsConstructor public class Member { private String name; private int age; private String mbti; /* @NoArgsConstructor가 자동생성 public void Member() {} */ }
Member member = new Member();
- final 필드가 있으면 초기화하지 못해 컴파일 오류를 낸다.

- @NonNull 필드는 널체크하지 않으므로 주의해서 사용해야한다.

- @NoArgsConstructor(force = true) : 필드의 기본값을 0 / false / null로 초기화한다.
@Slf4j public class LombokTest { @NoArgsConstructor(force = true) @Getter public class Member { private final String name; private int age; private String mbti; } @Test public void test() throws Exception { Member member = new Member(); String name = member.getName(); log.info("name={}", name); } }
@RequiredArgsConstructor
- final 또는 @NonNull이 붙은 필드를 파라미터로 가진 생성자를 생성한다.
@NoArgsConstructor public class Member { private final String name; @NonNull private int age; private String mbti; /* @RequiredArgsConstructor가 자동생성 public void Member(String name, @NonNull int age) { this.name = name; this.age = age; } */ }
Member member = new Member("memberA", 24);
- 스프링 DI에서 생성자 주입할 때 생성자를 생략하여 코드를 효율적으로 작성할 수 있다.
@Service public class MemberService { private final MemberRepository memberRepository; private final OrderRepository orderRepository; /* @RequiredArgsConstructor가 자동생성 public void MemberService( MemberRepository memberRepository, OrderRepository orderRepository) { this.memberRepository = memberRepository; this.orderRepository = orderRepository; } */ }
- @NonNull 필드는 파라미터 값으로 null이 들어오면 NullPointerException이 발생한다.
@Slf4j public class LombokTest { @RequiredArgsConstructor @Getter public class Member { private final String name; @NonNull private int age; @NonNull private String mbti; } @Test public void test() throws Exception { assertThatThrownBy(() -> new Member("AA", 12, null)) .isInstanceOf(NullPointerException.class); } }
@AllArgsConstructor
- 모든 필드 파라미터를 가진 생성자를 생성한다.
@AllArgsConstructor public class Member { private final String name; @NonNull private int age; private String mbti; /* @AllArgsConstructor가 자동생성 public void Member(String name, @NonNull int age, String mbti) { this.name = name; this.age = age; this.mbti = mbti; } */ }
Member member = new Member("memberA", 24, "ENFP");
정적 팩토리 매서드 static factory method @RequiredArgsConstructor(staticName= ”of”)
- staticName을 사용해서 정적 팩토리 매서드를 추가할 수 있다. private 생성자를 생성하여 이것을 감싸는 정적 팩토리 매서드를 생성한다.
@RequiredArgsConstructor(staticName= ”of”)
public class Member {
private final String name;
@NonNull
private int age;
private String mbti;
private Member(String name, @NonNull int age) {
if (age == null) {
throw new NullPointerException("age is null");
} else {
this.name = name;
this.age = age;
}
}
public static Member of(String name, @NonNull int age) {
return new Member(name,age);
}
}
필드 순서 변경
- 필드 순서가 변경되면 파라미터가 생성되는 순서도 바뀌기 때문에 주의해야 한다.
AccessLevel @NoArgsConstructor(access = AccessLevel.PRIVATE)
- access를 사용해 생성되는 생성자의 접근 레벨을 지정할 수 있다.

매뉴얼
'Programming Language > Java' 카테고리의 다른 글
[JSP] 간단한 로그인[2] 로그아웃 (0) | 2023.01.08 |
---|---|
[JSP] 간단한 로그인[1] (0) | 2023.01.08 |
[Java] Optional (0) | 2022.12.12 |
[Java] 문자열 비교 (==, equals)와 intern (0) | 2022.12.12 |
[Java] concat, append 문자열 합치기 (1) | 2022.12.12 |
댓글