심화/Spring

[Lombok] @AllArgsConstructor 사용을 지양하는 이유

annovation 2025. 10. 7. 09:27

@AllArgsConstructor

💡 @AllArgsConstructor 란?

  • Lombok에서 제공하는 어노테이션 중 하나
  • 모든 필드 값을 파라미터로 받는 생성자를 만든다. [각주:1]

💡 @AllArgsConstructor를 지양하는 이유

 

1️⃣ 기존 코드

@AllArgsConstructor
class Person {
    private String name;
    private int age;
}

 

2️⃣ 기존 코드로 인스턴스 생성

Person person = new Person("김철수", 25);

 

3️⃣ 다른 개발자가 기존 코드의 필드 순서를 바꾸게 되는 경우

@AllArgsConstructor
class Person {
    private int age;
    private String name;
}
  •  @AllArgsConstructor 는 필드 순서대로 생성자를 만들기 때문에 아래와 같은 생성자 메서드가 만들어 진다.
private Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

 

4️⃣ 기존 필드 순서대로 person 객체를 만들고 있던 코드에서는 오류가 발생한다.

Person person = new Person("김철수", 25); // 오류 발생

요약

1. @AllArgsConstructor는 모든 생성자를 필드 순서대로 만든다.

2. 필드 순서가 바뀌었는데 타입이 똑같을 경우 값이 잘못 들어가는데도 컴파일 오류가 나지 않는다.


참고 사이트

https://velog.io/@skb0516/AllArgsConstructor를-지양하는-이유-그리고-Builder와-함께-쓸-때

 

@AllArgsConstructor를 지양하는 이유 그리고 @Builder와 함께 쓸 때

저는 @AllArgsConstructor(access = AccessLevel.PRIVATE) 쓸 듯 !

velog.io


주석 출처