웹 개발/🍃 SpringBoot
Springboot | 생성자관련 어노테이션
이재원
2025. 3. 13. 19:15
생성자관련 어노테이션
- @NoArgsConstructor:
- 생성자에 아무런 매개변수도 없는 기본 생성자를 생성합니다.
- 주로 프레임워크(예: JPA)가 기본 생성자를 필요로 할 때 사용됩니다.
- @AllArgsConstructor:
- 클래스의 모든 필드를 매개변수로 받는 생성자를 생성합니다.
- 모든 필드를 한 번에 초기화할 수 있으며, 불필요한 필드까지 포함됩니다.
- @RequiredArgsConstructor:
- final 필드와 @NonNull로 표시된 필드(초기값이 없는 경우)만 매개변수로 받는 생성자를 생성합니다.
- 주로 의존성 주입(특히 생성자 주입) 시, 필요한 필드만 초기화하기 위해 사용합니다.
1. @NoArgsConstructor 예시
파라미터 없는 기본 생성자를 생성합니다.
import lombok.NoArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@NoArgsConstructor
@Getter
@Setter
public class NoArgsExample {
private int id;
private String name;
}
// 사용 예시
NoArgsExample example = new NoArgsExample(); // 기본 생성자 호출
example.setId(1);
example.setName("NoArgs");
2. @AllArgsConstructor 예시
모든 필드를 매개변수로 받는 생성자를 생성합니다.
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@AllArgsConstructor
@Getter
@Setter
public class AllArgsExample {
private int id;
private String name;
}
// 사용 예시
AllArgsExample example = new AllArgsExample(1, "AllArgs");
3. @RequiredArgsConstructor 예시
final 필드와 @NonNull로 표시된 필드만 매개변수로 받는 생성자를 생성합니다.
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.NonNull;
@RequiredArgsConstructor
@Getter
public class RequiredArgsExample {
private final int id; // final 필드 → 생성자에 포함됨
@NonNull
private String name; // @NonNull → 생성자에 포함됨
private String description; // 일반 필드 → 생성자에 포함되지 않음
}
// 사용 예시
// 아래 생성자는 RequiredArgsExample(int id, String name) 형태로 생성됨
RequiredArgsExample example = new RequiredArgsExample(1, "RequiredArgs");
// 이후 필요한 경우 setter 등을 통해 description을 설정할 수 있습니다.
서비스에서의 예시 (생성자 주입)
서비스 계층에서는 보통 필드주입(@autowired) 대신 생성자 주입을 사용 합니다.
보통 서비스에서는 의존성 주입을 위해 final 필드를 사용하고, @RequiredArgsConstructor를 활용합니다
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class MyService {
// final 필드에 대해 Lombok이 생성자를 자동으로 만들어줍니다.
private final MyRepository repository;
public void doServiceLogic() {
// 서비스 로직 구현
}
}
생성자 주입의 장점
불변성 보장 : 의존성을 final 필드로 선언하여 객체 생성 후 변경이 불가능해집니다.
명시적 의존성 : 생성자를 통해 어떤 의존성이 필요한지 한눈에 파악할 수 있습니다.
테스트 용이성 : 생성자를 통한 의존성 주입은 단위 테스트 시 모의 객체(mock)를 주입하기 쉽습니다.
Lombok과의 결합 : Lombok의 @RequiredArgsConstructor를 사용하면 보일러플레이트 코드를 줄이고, 생성자 주입을 간결하게 구현할 수 있습니다.
반응형