Web/스프링부트(SpringBoot Framework)

(1) @AllArgsConstructor과 @NoArgsConstructor 차이점

심플블루 2024. 7. 15. 16:05
반응형

@AllArgsConstructor@NoArgsConstructor둘 다 롬복(Lombok) 라이브러리의 애노테이션으로, 각각 클래스에 대해 모든 필드를 매개변수로 받는 생성자와 기본 생성자(매개변수가 없는 생성자)를 자동으로 생성해줍니다.

두 애노테이션의 주요 차이점은 생성하는 생성자의 종류와 용도입니다.

 

@AllArgsConstructor

  • 기능: 클래스의 모든 필드를 매개변수로 받는 생성자를 생성합니다.
  • 사용 목적: 주로 의존성 주입이나 객체 생성 시 모든 필드를 초기화해야 할 때 사용됩니다.
  • 예시 코드:
import lombok.AllArgsConstructor;

@AllArgsConstructor
public class MyClass {
    private String name;
    private int age;
    private boolean active;

    // 롬복이 자동으로 생성하는 생성자:
    // public MyClass(String name, int age, boolean active) {
    //     this.name = name;
    //     this.age = age;
    //     this.active = active;
    // }
}

 

@NoArgsConstructor

  • 기능: 기본 생성자(매개변수가 없는 생성자)를 생성합니다.
  • 사용 목적: 주로 JPA 같은 ORM 프레임워크에서 엔티티를 생성할 때 필요하거나, 빈 객체를 생성해야 할 때 사용됩니다.
  • 예시 코드:
import lombok.NoArgsConstructor;

@NoArgsConstructor
public class MyClass {
    private String name;
    private int age;
    private boolean active;

    // 롬복이 자동으로 생성하는 생성자:
    // public MyClass() {
    // }
}

 

 

차이점 요약

  1. 생성자 종류:
    • @AllArgsConstructor: 모든 필드를 매개변수로 받는 생성자를 생성합니다.
    • @NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성합니다.
  2. 사용 목적:
    • @AllArgsConstructor: 객체 생성 시 모든 필드를 초기화해야 하는 경우에 사용됩니다. 주로 의존성 주입, DTO, VO 등의 클래스를 초기화할 때 유용합니다.
    • @NoArgsConstructor: 기본 생성자가 필요한 경우에 사용됩니다. 주로 JPA 엔티티나 기본 생성자가 필요한 프레임워크에서 사용됩니다.
  3. 조합:
    • 두 애노테이션은 동시에 사용할 수 있습니다. 이 경우, 클래스에는 모든 필드를 초기화하는 생성자와 기본 생성자 둘 다 생성됩니다.
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
public class MyClass {
    private String name;
    private int age;
    private boolean active;
}

 

==> 위 예시에서, MyClass는 다음 두 생성자를 갖게 됩니다.

public MyClass() {
}

public MyClass(String name, int age, boolean active) {
    this.name = name;
    this.age = age;
    this.active = active;
}

 

 

사용 예시

예시 1: 엔티티 클래스

엔티티 클래스에서는 기본 생성자가 필요하기 때문에 @NoArgsConstructor를 자주 사용합니다.

import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@NoArgsConstructor
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
}

 

예시 2: 서비스 클래스

의존성 주입을 위해 모든 필드를 초기화하는 생성자가 필요한 경우 @AllArgsConstructor를 사용합니다.

import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class UserService {
    private final UserRepository userRepository;
    private final EmailService emailService;
}

 

 

이러한 방법으로, 두 애노테이션을 상황에 맞게 사용하여 코드의 가독성과 유지보수성을 높일 수 있습니다.

반응형