본문 바로가기
개발

[Lombok] @AllArgsConstructor, @NoArgsConstructor

by angeloper 2023. 7. 15.
반응형

@AllArgsConstructor@NoArgsConstructor라는 두 가지 주석을 제공하는데, 실제로 현업에서도 많이 쓰이는 주석이기도 합니다. 이에, 오늘은 2가지 주석에 대해서 설명을 드리려고 합니다.

기본 설명

@AllArgsConstructor클래스의 모든 필드에 대한 매개변수가 있는 생성자를 자동으로 생성하는 반면 @NoArgsConstructor매개변수가 없는 생성자를 생성합니다. 이러한 주석은 생성자를 수동으로 작성하는 부담을 줄이고 간결한 코드를 유지하는 데 도움이 됩니다.

예제 코드

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@NoArgsConstructor  // NoArgsConstructor 어노테이션 사용
@AllArgsConstructor  // AllArgsConstructor 어노테이션 사용
public class Person {
    private String name;
    private int age;
    private String address;
}

예제코드와 같이 주석의 경우에는 클래스 위에서 사용되게 됩니다.  그러나 가끔 주석을 사용함에도 불구하고, 기본생성자 및 전체 매개변수 생성자를 생성함에 따라 중복으로 인하여 에러가 발생하는 경우가 존재합니다. 이 부분은 조심해 주시기 바랍니다.

위 코드로 인하여 아래 코드로 변형되게 됩니다. (물론, 여러가지 변수로 인하여 다르게 나올수는 있지만 위 코드로 인하여 발생하는 코드는 하단과 같습니다.)

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

public class Person {
    private String name;
    private int age;
    private String address;
    
    // @NoArgsConstructor으로 인한 소스 생성
    public Person() {}
    
    // @AllArgsConstructor으로 인한 소스 생성
    public Person(String name, int age, String address) {
      this.name = name;
      this.age = age;
      this.address = address;
    }
}

 

@AllArgsConstructor 옵션

  • access: 생성된 생성자의 접근 수정자를 설정합니다(기본값: public).
  • prefix: 생성자의 이름에 접두어를 추가합니다.
  • suffix: 생성자의 이름에 접미사를 추가합니다.
  • staticName: 생성자의 사용자 지정 이름을 지정하고 해당 이름으로 정적 메서드를 생성합니다.
  • onConstructor: 생성자에 추가 주석을 적용할 수 있습니다.

@NoArgsConstructor 옵션

  • access: 생성된 생성자의 액세스 수정자를 설정합니다.
  • force: 필드가 없더라도 생성자를 강제로 생성합니다.
  • staticName: 생성자의 사용자 지정 이름을 지정하고 해당 이름으로 정적 메서드를 생성합니다.
  • onConstructor: 생성자에 추가 주석을 적용할 수 있습니다.

주석사용의 장점

  • 편의성: 이러한 주석을 사용하면 생성자를 수동으로 작성할 필요가 없으므로 개발자의 시간과 노력이 절약됩니다.
  • 가독성: 생성자를 자동으로 생성함으로써 코드가 더 간결해지고 읽고 이해하기 쉬워집니다.
  • 유지 관리: 클래스의 필드가 변경되거나 새 필드가 추가되면 생성자가 자동으로 업데이트되어 오래된 생성자로 인해 버그가 발생할 가능성이 줄어듭니다.
  • 사용자 지정: 주석은 액세스 한정자 제어, 생성자 이름에 접두사 또는 접미사 추가, 추가 주석 적용 등 생성된 생성자를 사용자 지정하는 다양한 옵션을 제공합니다.

주석사용의 단점

  • 축소된 제어: 자동으로 생성된 생성자는 수동으로 작성된 생성자가 제공하는 정확한 수준의 제어 및 사용자 지정을 제공하지 않을 수 있습니다.
  • 숨겨진 복잡성: 생성된 생성자는 코드를 단순화하지만 근본적인 복잡성을 모호하게 하여 잠재적인 문제를 식별하고 해결하기 어렵게 만듭니다.
  • 제한된 유연성: 경우에 따라 생성된 생성자의 기본 동작이 특정 요구 사항과 일치하지 않을 수 있으므로 대신 수동 생성자가 필요합니다.

결론

@AllArgsConstructor 및 @NoArgsConstructor를 활용하면 생성자를 작성하는 데 필요한 노력을 줄여 보다 간결하고 유지 관리 가능한 코드를 만들 수 있습니다.

반응형