Bean? 이게 뭐야
콩이야....? 우엑
오늘 드디어 강의가 Spring에 들어가기 시작했고,
가장 기초면서 중요한 스프링 빈(Bean)에 대해 포스팅 할려고 한다.
스프링 Bean
Spring 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트
Spring의 특징에는 제어 역전(IoC)이라는 특징이 있다.
제어 역전(IoC)
Inversion of Control: 제어 반전
우리(개발자)가 객체들을 생성 & 소멸을 스프링 컨테이너가 관리하는 특징
Spring 컨테이너
자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공
쉽게 이해하자면 new
키워드를 Spring의 컨테이너가 담당하는 것이다.
<bean id="user" class="com.example.myapp.User"/>
User user = new User();
뭔 이름부터 콩 같아가지고...
Spring에서는 각각의 클래스들이 의존관계를 가지고 있다.
DB를 연결하는 Repository
클래스
Repository
클래스를 사용하는 Service
클래스
Service
클래스를 사용하는 Control
서비스
Web 프로그래밍은 동시성 제어가 중요하다.
이를 위해서는 Spring 컨테이너는 싱글톤 패턴으로 관리한다.
Singleton Pattern (싱글톤 패턴)
디자인 패턴 중 하나, 객체의 인스턴스가 오직 1개만 생성
생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이며 이후에 호출된 생성자는 최초의 생성자가 객체를 리턴하는 것
당연한 얘기다.
축구를 한다고 가정하면, 축구를 할 때마다 축구공을 만들거나 구매하는 것은 멍청한 얘기다.
그냥 처음에 구매했던 축구공으로 계속 축구를 하는게 효율적이지 않은가?
여기서 축구공 == 객체를 의미한다.
또한 의존성 주입(DI)과 라이프사이클 관리에도 용이하다는 장점이 있다.
@Configuration
public class SpringConfig {
@Bean
public UserService userService() {
return new UserService();
}
}
@Configuration
안에 @Component
를 사용하기 때문에 @ComponentScan
의 스캔 대상이 된다.
@Controller
public class UserController{
@Autowired
private UserService userService;
}
@Autowired로 의존성 주입까지 완료한 상태다.
의존성 주입
컨테이너에서 Bean을 먼저 생성해두고 생성한 객체를 지정한 객체에 주입하는 방식
도대체 얘 이름은 왜 Bean(콩)일까?
Java라는 프로그래밍 언어는 인도네시아 Java 섬 커피를 즐겨마시던 개발자에 의해 만들어지게 되었다.
그래서 Java 용어는 거의 커피와 관련되어 있는 용어다.
JAVA도 애초에 유명한 커피 재배지인 인도네시아 섬 이름인 자바섬에서 따왔다고 한다.
(커피콩 등등..)
이름이 콩(bean)처럼 작고 간단하게 사용할 수 있는 요소라는 의미인가...?
그리고 Bean을 항아리에 담겠다 라고 해서 최종 빌드된 패키징파일은 .jar파일로 생성된다
(항아리가 영어로 jar..)