Develop/Java

[Java] @RequiredArgsConstructor와 @NoArgsConstructor : 생성자를 자동으로 관리하는 방법

DevPi 2024. 7. 31. 19:52
반응형

Java 애플리케이션을 개발하면서 클래스의 생성자를 정의하는 것은 매우 흔한 일입니다. 그러나 반복적인 생성자 작성은 귀찮고 번거로울 수 있습니다. 이를 해결하기 위해 Lombok 라이브러리는 생성자를 자동으로 생성해주는 편리한 어노테이션을 제공합니다.

오늘은 그중에서도 @RequiredArgsConstructor와 @NoArgsConstructor에 대해 자세히 살펴보겠습니다.


@NoArgsConstructor: 기본 생성자 자동 생성

정의

@NoArgsConstructor는 매개변수가 없는 기본 생성자를 자동으로 생성해주는 Lombok 어노테이션입니다. 이 어노테이션을 사용하면 클래스에 기본 생성자를 직접 작성할 필요가 없습니다.

 

사용 예시

import lombok.NoArgsConstructor;

@NoArgsConstructor
public class User {
    private String id;
    private String name;
    private String gender;
    private Date birth;
    private String phoneNumber;
    private Timestamp createdAt;
}

위의 예제에서는 Lombok이 자동으로 다음과 같은 기본 생성자를 생성합니다.

public User() {}

 

옵션

  • force: final 필드나 @NonNull 필드에 기본 값을 설정하여 강제로 기본 생성자를 생성할 수 있습니다.
  • access: 생성자의 접근 수준을 지정할 수 있습니다. (예: AccessLevel.PUBLIC, AccessLevel.PROTECTED)

force 속성 사용 예시

import lombok.NoArgsConstructor;

@NoArgsConstructor(force = true)
public class User {
    private final String id = "defaultId";
    private String name;
    private String gender;
    private Date birth;
    private String phoneNumber;
    private Timestamp createdAt;
}

위의 예제에서는 Lombok이 다음과 같은 기본 생성자를 생성합니다.

public User() {
    this.id = "defaultId";
}

@RequiredArgsConstructor: 필수 필드 초기화

정의

@RequiredArgsConstructor는 final 필드와 @NonNull 어노테이션이 붙은 필드를 초기화하는 생성자를 자동으로 생성해주는 Lombok 어노테이션입니다. 필요한 필드만 초기화하는 생성자를 쉽게 작성할 수 있습니다.

 

사용 예시

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class User {
    private final String id;
    private String name;
    private final String gender;
    private Date birth;
    private String phoneNumber;
    private Timestamp createdAt;
}

위의 예제에서는 Lombok이 자동으로 다음과 같은 생성자를 생성합니다.

public User(String id, String gender) {
    this.id = id;
    this.gender = gender;
}

 

옵션

  • staticName: 생성자를 대신하는 정적 팩토리 메서드를 생성합니다.
  • access: 생성자의 접근 수준을 지정할 수 있습니다 (예: AccessLevel.PUBLIC, AccessLevel.PROTECTED).

공통점

  • 생성자 자동 생성: 둘 다 Lombok을 사용하여 생성자를 자동으로 생성해줍니다.
  • 접근 수준 제어: access 속성을 사용하여 생성자의 접근 수준을 제어할 수 있습니다.
  • 코드 간결화: 두 어노테이션 모두 생성자를 직접 작성할 필요가 없어 코드의 간결성과 가독성을 높여줍니다.

차이점

  1. 생성자 종류:
    • @NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성합니다.
    • @RequiredArgsConstructor: final 필드와 @NonNull 필드를 초기화하는 생성자를 생성합니다.
  2. 필드 초기화:
    • @NoArgsConstructor: 필드를 초기화하지 않습니다.
    • @RequiredArgsConstructor: 지정된 필드를 초기화합니다.
  3. 사용 목적:
    • @NoArgsConstructor: 기본 생성자가 필요한 경우, 예를 들어 JPA 엔티티나 프레임워크가 객체를 인스턴스화할 때 사용합니다.
    • @RequiredArgsConstructor: 특정 필드를 반드시 초기화해야 하는 경우, 예를 들어 DI(Dependency Injection) 패턴에서 필요한 필드를 초기화할 때 사용합니다.

결론

  • @NoArgsConstructor는 매개변수가 없는 기본 생성자를 자동으로 생성하여, 기본 생성자가 필요한 경우에 유용합니다.
  • @RequiredArgsConstructor는 final 필드와 @NonNull 필드를 초기화하는 생성자를 자동으로 생성하여, 특정 필드를 반드시 초기화해야 하는 경우에 유용합니다.

Lombok의 이 두 어노테이션을 상황에 맞게 사용하면 코드의 간결성과 유지보수성을 크게 높일 수 있습니다. 여러분의 프로젝트에서 적극 활용해보세요!

반응형