IoC란?

IoC(Inversion of Control)는 제어의 역전을 의미합니다. 객체의 생성과 생명주기를 개발자가 아닌 프레임워크가 관리합니다.

DI (Dependency Injection)

의존성 주입은 IoC를 구현하는 방법 중 하나입니다.

Constructor Injection (권장)

@Service
public class UserService {
    private final UserRepository userRepository;

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

Field Injection (비권장)

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;  // 테스트하기 어려움
}

Bean 등록 방법

1. @Component 계열 어노테이션

@Component
@Service
@Repository
@Controller

2. @Configuration + @Bean

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

학습 메모

  • 생성자 주입을 사용하면 final 키워드로 불변성 보장 가능
  • 순환 참조 문제를 생성자 주입 사용 시 컴파일 타임에 발견 가능
  • @Autowired는 생성자가 하나면 생략 가능 (Spring 4.3+)