스프링 프레임워크를 사용하는 이유가 객체의 생성과 조립을 편하게 해준다는 것을 알았다. 또 강의를 통해 스프링에서 컨테이너에 빈들이 관리된다는 것도 알았다. 하지만 빈이 뭐냐고 스스로 명확하게 답할 수 없어 조금 더 공부를 해보기로 했다.
스프링 공식 문서에서 가져온 정의다.
Srping IoC 컨테이너에 의해서 관리되고 어플리케이션에서 중요한 역할을 하는 객체라고 한다. 그리고 IoC 컨테이너가 생성하고 조립하고 관리까지 한다고 한다. 설명이 돈다. 그럼 IoC 컨테이너는 뭘까?
IoC 컨테이너는 Inversion of Control(IoC)를 구현한 프레임워크다. 그래서 IoC를 이해해야 한다.
IoC는 쉽게 말해 한 객체가 그것의 의존하고 있는 의존성을 생성하지 않고 정의하는 프로세스다. 객체는 IoC 컨테이너에게 그러한 의존성들을 만드는 작업을 위임한다. 객체를 생성하고 관리하는 역할을 프레임워크에게 넘기기 때문에 제어의 역전이라고 불리는 것이다.
이렇게 IoC를 구현하는데는 전략 패턴, 서비스 로케이터 패턴, 팩토리 패턴, 의존성 주입 패턴 등으로 만들 수 있다.
의존성과 의존성 주입에서 Assembler
라는 코드에서 필요한 의존 객체들을 생성해서 주입해주고 있었다.
그러면 객체는 IoC 컨테이너에서 그냥 필요한 객체들을 받기만 하면되는 것이다. 그럼 프로그래머는 컨테이너에게 적절하게 설정 메타데이터만 주기만 하면 된다.
스프링에서 Application Context
인터페이스가 IoC 컨테이너를 나타낸다. (정확하게는 BeanFactory의 하위 인터페이스다. 위에서 언급했다시피 컨테이너는 객체의 생성, 조립, 관리를 책임진다.
빈들을 조립하기 위해서 메타데이터가 필요한데 세 가지 방법이 있다.
자바빈은 그냥 특정 컨벤션을 따르는 자바 객체다.
처음 설명했듯이 스프링 IoC 컨테이너가 생성, 관리하는 객체다.
결국 자바 빈과 스프링 빈은 집합 개념으로 따지자면 교집합 부분도 있지만 차집합 부분도 각각 가지고 있는 셈이다.
이 단어를 만든 마틴 파울러가 POJO 프레임워크나 서버 환경이 필요 없는 그냥 일반적인 자바 객체를 나타낸다고 했다.
그럼 굳이 정리를 해보자면 POJO와 스프링 빈은 공집합이 있을 수 없고, 스프링 빈과 자바 빈은 교집합이 있을 수 있다. 자바 빈과 POJO 역시 교집합이 생길 수 있고, 아예 비슷한 의미로 쓰이는 경우도 있다고 한다.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans
https://www.baeldung.com/spring-bean