스프링(Spring)에서 "Bean"은 애플리케이션 컨텍스트(ApplicationContext) 내에서 관리되는 객체를 가리킵니다. 스프링 프레임워크는 객체 지향 프로그래밍을 지원하며, 이 객체들을 "Bean"으로 관리하고 제어합니다. 이러한 객체들은 스프링 컨테이너(ApplicationContext)에 의해 생성, 구성, 관리되며, 이를 통해 의존성 주입(Dependency Injection)과 관련된 작업들을 수행할 수 있습니다.
아래는 스프링 Bean에 대한 상세한 설명과 코드 예시입니다.
생성 및 관리: 스프링 컨테이너는 Bean의 라이프사이클을 관리하며, Bean을 생성하고 초기화하며, 필요한 경우 소멸시킵니다. 이로써 개발자는 객체의 생성 및 관리에 대한 걱정을 덜 수 있습니다.
의존성 주입: 스프링은 Bean 간의 의존성을 주입해주는 기능을 제공합니다. 이를 통해 객체 간의 결합도를 낮추고 코드의 재사용성과 테스트 용이성을 향상시킵니다.
스코프: Bean은 여러 가지 스코프를 가질 수 있습니다. 예를 들어 싱글톤(Singleton), 프로토타입(Prototype), 세션(Session), 요청(Request) 등의 스코프를 설정할 수 있습니다.
<!-- XML 설정 파일에서 Bean 정의 -->
<bean id="userService" class="com.example.UserService">
<property name="userRepository" ref="userRepository"/>
</bean>
<bean id="userRepository" class="com.example.UserRepository"/>
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
@Component
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
@Component
public class UserRepository {
// ...
}
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
위의 코드 예시에서 @Bean
어노테이션을 사용하거나 XML 설정 파일에서 <bean>
요소를 사용하여 스프링 컨테이너에 Bean을 등록합니다. 이렇게 등록된 Bean은 스프링 컨테이너에 의해 생성 및 관리되며, 다른 Bean과 의존성 주입이 가능합니다.
스프링에서 Bean을 사용하려면 컨테이너를 구성하고 설정해야 하며, 애플리케이션에서 필요한 곳에서 이러한 Bean을 주입받아 사용할 수 있습니다. 이러한 방식으로 스프링은 애플리케이션의 객체 관리와 의존성 주입을 효과적으로 관리하고 유지보수를 쉽게 만들어줍니다.