✅ @AllArgsConstructor, @NoArgsConstructor, @RequiredArgsConstructor, @Autowired

졸용·2025년 3월 28일

✅ 1. @AllArgsConstructor (Lombok)

  • 모든 필드를 인자로 받는 생성자를 자동 생성

  • 보통 DTO나 테스트용 객체 생성에 편리함

  • final, non-final 구분 없이 모든 필드를 포함함

@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

→ 생성자:

public Person(String name, int age) { ... }

✅ 2. @NoArgsConstructor (Lombok)

  • 기본 생성자(파라미터 없는 생성자)를 자동 생성

  • 주로 JPA Entity 클래스에서 사용 (JPA는 프록시 생성을 위해 기본 생성자를 요구)

@NoArgsConstructor
public class Person {
    private String name;
    private int age;
}

→ 생성자:

public Person() { }

✅ 3. @RequiredArgsConstructor (Lombok)

  • final이 붙은 필드 또는 @NonNull이 붙은 필드만 포함한 생성자 자동 생성

  • 의존성 주입(DI)을 위해 자주 사용됨 (Spring과 궁합이 좋음)

  • 의존성 주입 시 생성자 주입 방식으로 사용하면 깔끔함

@RequiredArgsConstructor
public class PersonService {
    private final PersonRepository personRepository;
    private final String name;
    private int age; // 포함되지 않음
}

→ 생성자:

public PersonService(PersonRepository personRepository, String name) { ... }

✅ 4. @Autowired (Spring)

  • Spring이 의존성 주입(DI)을 해주는 어노테이션

  • 필드 주입, 생성자 주입, 세터 주입 등에서 사용됨

예시 1: 필드 주입 (비추)

@Autowired
private MyService myService;

예시 2: 생성자 주입 (권장)

@RequiredArgsConstructor
public class MyController {
    private final MyService myService;
}

→ Spring이 생성자가 하나만 있으면 @Autowired 생략해도 알아서 주입해줌 (생성자 1개일 때는 자동 적용)


🔄 정리 비교

어노테이션라이브러리역할특징
@AllArgsConstructorLombok모든 필드 포함 생성자 생성테스트용, DTO
@NoArgsConstructorLombok기본 생성자 생성JPA Entity
@RequiredArgsConstructorLombokfinal/@NonNull 필드만 포함생성자 기반 DI
@AutowiredSpring의존성 자동 주입생성자/필드/세터 주입

💡 추천 사용 방식 (Spring + Lombok 조합)

@RequiredArgsConstructor
@Service
public class MyService {
    private final MyRepository myRepository;
}

→ 깔끔하고, 불변 객체 유지 가능하고, 테스트하기도 좋음!

profile
꾸준한 공부만이 답이다

2개의 댓글

comment-user-thumbnail
2025년 3월 28일

오늘 머리가 굳어 아무리 봐도 잘 이해가 안가 내일 다시 보러오겠습니다 정리 잘해주셔서 너무 감사합니다

1개의 답글