스프링 부트에서 의존성 주입은 객체 간의 연결을 자동으로 설정해주는 방식이에요. 예를 들어, A 클래스가 B 클래스의 기능을 사용해야 한다고 해볼게요. 보통은 A 클래스 안에서 B를 직접 생성해서 사용하겠지만, 의존성 주입을 사용하면 AB를 직접 만들지 않아도 돼요. 스프링이 A에 필요한 B 객체를 자동으로 넣어주기 때문이죠.

이렇게 하면 코드가 더 깔끔해지고, 변경이 쉬워져요. 예를 들어 B의 구현을 다른 클래스로 바꿔야 할 때, A를 수정할 필요 없이 스프링 설정만 바꾸면 돼요.

Spring Boot에서 **의존성 주입(Dependency Injection)**은 클래스가 필요한 객체를 외부에서 자동으로 주입해 주는 기능입니다. 이를 통해 개발자는 코드에서 객체 생성과 초기화를 명시적으로 하지 않고도 원하는 객체를 사용할 수 있어 코드가 더 깔끔해지고 유연성이 높아집니다.

1. 의존성 주입의 개념

간단히 말해, 의존성 주입은 클래스가 필요한 객체를 직접 생성하지 않고, 외부에서 주입받는 방식입니다. 예를 들어, UserService라는 클래스가 UserRepository라는 객체를 필요로 할 때, UserService가 직접 UserRepository 객체를 생성하지 않고 Spring이 대신 생성해 주입해 줍니다.

2. 의존성 주입의 장점

3. 의존성 주입 방법

Spring Boot에서는 주로 @Autowired 어노테이션을 사용하여 의존성을 주입합니다. 주입 방법은 크게 필드 주입, 생성자 주입, 세터 주입이 있습니다.

3.1 필드 주입

필드에 직접 주입하는 방식으로, @Autowired 어노테이션을 필드에 붙여주면 됩니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public void doSomething() {
        userRepository.save();
    }
}

3.2 생성자 주입 (추천 방법)

생성자를 통해 객체를 주입받는 방식입니다. @Autowired를 생성자에 붙이거나, 최신 Spring에서는 생략해도 자동으로 주입됩니다.

import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {  // 생성자를 통해 주입
        this.userRepository = userRepository;
    }

    public void doSomething() {
        userRepository.save();
    }
}