반응형
@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() {
// }
}
차이점 요약
- 생성자 종류:
- @AllArgsConstructor: 모든 필드를 매개변수로 받는 생성자를 생성합니다.
- @NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성합니다.
- 사용 목적:
- @AllArgsConstructor: 객체 생성 시 모든 필드를 초기화해야 하는 경우에 사용됩니다. 주로 의존성 주입, DTO, VO 등의 클래스를 초기화할 때 유용합니다.
- @NoArgsConstructor: 기본 생성자가 필요한 경우에 사용됩니다. 주로 JPA 엔티티나 기본 생성자가 필요한 프레임워크에서 사용됩니다.
- 조합:
- 두 애노테이션은 동시에 사용할 수 있습니다. 이 경우, 클래스에는 모든 필드를 초기화하는 생성자와 기본 생성자 둘 다 생성됩니다.
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;
}
이러한 방법으로, 두 애노테이션을 상황에 맞게 사용하여 코드의 가독성과 유지보수성을 높일 수 있습니다.
반응형
'Web > 스프링부트(SpringBoot Framework)' 카테고리의 다른 글
(3) @RequestParam과 @PathVariable 차이점 (0) | 2024.07.15 |
---|---|
(2) @Autowired와 @AllArgsConstructor 차이점 (0) | 2024.07.15 |
(2) 스프링부트, JPA로 구현한 로그인을 시도한 사용자의 접속 시간 저장 (0) | 2024.07.11 |
(1) 스프링부트, JPA로 구현한 로그인을 시도한 사용자의 IP 저장 (0) | 2024.07.11 |
React와 Spring Boot를 함께 사용하는 환경에서 서버 사이드 렌더링(SSR) 구현하기...(작성중) (0) | 2024.07.10 |