Lombok - ArgsConstructor들

박지운·2023년 6월 30일
0

생성자 관련 3가지 어노테이션을 제대로 알지 못하고 사용하였기에 이번에는 확실히 알고 가고자 정리한다.
종류는 @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor가 있다.

@NoArgsConstructor

먼저 @NoArgsConstructor는 파라미터가 없는 생성자를 만든다. 필드에 final 있다면 초기화가 불가능하기에 컴파일러는 에러를 발생한다.
만약 @NoArgsConstructor(force = true)를 사용하면 모든 final변수가 0/false/null값으로 초기화된다. 하지만 @NonNull제약조건이 있어도 나중에 초기화를 해주기 전가지 null확인을 하지 못한다.

@RequiredArgsConstructor

@RequiredArgsConstructor는 특수 처리가 필요한 각 필드에 대해 파라미터를 갖는 생성자를 만들어준다.
-> 초기화 되지않은 fianl필드나 @NonNull이 붙은 필드에 대해 생성자를 생성해준다.

@AllArgsConstructor

@AllArgsConstructor는 클래스 모든 필드에 대한 생성자를 만든다.

주의❗

@RequiredArgsConstructor@NoArgsConstructor는 사용을 지양해야한다고 한다.
이유는 아래의 코드를 보자.

@AllArgsConstructor/@RequiredArgsConstructor
public static class Foo {
	private int f1;
	private int f2;
}

Foo foo = new Foo(100, 200);

위 코드에서 가시성의 이유로 f1과 f2의 순서를 바꿨을 경우 타입이 같기 때문에 값이 서로 엇갈려 들어가도 알기가 힘들다.

따라서 아래 코드처럼 Builder사용을 권장한다.

public static class Foo {
	private int f1;
	private int f2;

	@Builder
	private Foo(int f1, int f2) {
		this.f1 = f1;
		this.f2 = f2;
	}
}

Foo foo = Foo.builder().f1(100).f2(200).build();

@Builder 또한 다음에 제대로 정리를 해야할 것 같다.


출처: projectlombok.org
https://devk0ng.github.io/2021/07/30/lombok/#AllArgsConstructor

profile
앞길막막 전과생

0개의 댓글