[trouble shooting] wrong value with @AllArgsConstructor & @RequiredArgsConstructor

2022. 11. 30. 09:35BACKEND/TROUBLE SHOOTING

 

 

문제

원하는 필드에 원하는 값이 들어오지 않음.

 

해결

파라미터의 순서가 중요.

 

설명

@AllArgsConstructor : 객체 내부의 인스턴스 멤버들을 모두 가지는 생성자를 생성

@RequiredArgsConstructor : 객체 내부의 final, @Notnull이 붙은 인스턴스 멤버들을 가지고 있는 생성자를 생성

두 어노테이션은 인스턴스 멤버의 순서가 중요하다. 인스턴스 멤버의 순서가 생성자의 파라미터의 순서와 동일하기 때문이다. 아래 클래스에 대해 자동으로 firstName, lastName 순서로 인자를 받는 생성자가 만들어지므로 파라미터도 필드 선언 순서에 맞게 써야한다.

LombokTest lombokTest = new LombokTest("harry", "lee");

 

근데 만약 인스턴스 멤버의 순서가 아래와 같이 바뀐다면, 물론 두 인스턴스 멤버가 동일한 타입이기 때문에 컴파일 에러가 나지는 않지만 잘못된 값이 들어갈 수 있다. firstName에 lastName이, lastName에 firstName이 들어가는 것이다.

 

그래서 순서에 의존적이지 않은 @Builder를 이용한 객체 생성을 선호하기도 한다.

 

참고자료

Lombok @AllArgsConstructo.. : 네이버블로그 (naver.com)

 

Lombok @AllArgsConstructor, @RequiredArgsConstructor 사용 주의

안녕하세요. 이번 글은 Lombok 어노테이션 중 @AllArgsConstructor 과 @RequiredArgsConstructor 사...

blog.naver.com

@AllArgsConstructor와 @Req.. : 네이버블로그 (naver.com)

 

@AllArgsConstructor와 @RequiredArgsConstructor의 문제점

우리 팀에선 @Builder를 사용하기 전에 @AllArgsConstructor와 @RequiredArgsConstructor를 사용하...

blog.naver.com