@Autowired 주입 방식 3가지

DEV NAHYUN·2025년 2월 25일
0

Spring

목록 보기
8/8

1️⃣ 필드 주입 (권장 X)

@Component
public class UserService {
    @Autowired
    private UserRepository userRepository;
}

✅ 장점: 코드 간결
❌ 단점:

DI 프레임워크 없이 테스트 어려움 (필드 직접 설정 불가)
불변성(immutable) 보장 안됨
Spring에 강하게 결합됨 (외부에서 변경 불가)
📌 → 필드 주입은 거의 쓰지 않는 게 좋음!

2️⃣ 세터 주입 (가급적 X)

@Component
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

✅ 장점: 필요할 때만 의존성을 변경 가능
❌ 단점:

객체 생성 후에도 의존성이 바뀔 수 있어 불변성 보장 안됨.
의존성이 없으면 객체 생성이 실패할 수도 있음.
📌 → 보통 사용하지 않음. 특별한 경우에만 사용.

3️⃣ 생성자 주입 (💡 추천)

@Component
public class UserService {
private final UserRepository userRepository;

@Autowired  // (Spring Boot 4.x부터는 생략 가능)
public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
}

}
✅ 장점:

불변성 보장 (final 사용 가능)
Spring에 덜 의존적 (@Autowired 없어도 Spring Boot 4.x에서는 자동 주입됨)
테스트가 쉬움 (의존성을 직접 주입 가능)
📌 → 가장 권장되는 방식!

📌 private final + 생성자 주입 방식

@RequiredArgsConstructor
@Component
public class UserService {
    private final UserRepository userRepository;
}

@RequiredArgsConstructor → 모든 final 필드에 대한 생성자 자동 생성
Spring Boot 4.x에서는 @Autowired 없이도 자동 주입됨
가장 깔끔한 코드 → 이 방식 추천!

profile
나만 알아보면 된다는 마음으로 작더라도 조금씩

0개의 댓글

관련 채용 정보