[SpringBoot] POJO란, Bean과 BeanPostProcessor와 LifeCycle, Component Scan

임유빈·2022년 8월 28일
post-thumbnail

POJO(Plain Old Java Object) :

DTO, VO, BEAN 등 getter 와 setter 로만 이루어진 순수 자바 오브젝트 클래스임을 말한다.

오래된 방식의 간단한 자바 오프젝트라는 말로 중량 프레임워크를 사용하게 되면서
해당 프레임 워크에 종속된 무거운 객체를 만들게 된 것에 반발하며 사용하기 시작한 용어이다.

진정한 POJO란 객체지향적인 원리에 충실하며, 환경과 기술에 종속되지 않고
필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.

Bean :

스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다. (주입 당하는 클래스를 의미한다.)

+@Configuration :

Bean에 추가 설정을 줘서 싱글톤으로 만들지 않는 이상 무조건 빈에 대해 싱글톤을 보장한다.

BeanPostProcessor :

Bean을 관리하는 관리자로 라이프 사이클 이전, 이후에 필요한 부가작업을 할 수 있는 라이프 사이클 콜백이다.

BeanPostProcessor의 구현체인 AutowiredAnnotationBeanPostProcessor (하나의 빈으로써 spring IoC 컨테이너에 등록되어 있다.)가 빈의 초기화 라이프 사이클 이전,
즉 빈이 생성되기 전에 @Autowired가 붙어있으면 해당하는 빈을 찾아서 주입해주는 작업을 한다.

Component Scan :

@Component를 명시하여 빈을 추가하는 방법이다. 클래스 위에 @Component를 붙이면 Spring이 알아서 SpringContainer에 Bean을 등록한다. (클래스 또는 인터페이스에만 사용이 가능하다.)

둘의 차이점 :

  • @Bean
    개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. 메소드 또는 어노테이션 단위에 붙일 수 있다.
  • @Component
    개발자가 직접 컨트롤이 가능한 클래스들의 경우에 사용된다. 클래스 또는 인터페이스 단위에 붙일 수 있다.

Bean LifeCycle 콜백 :

콜백 : 조건에 따라 실행될 수도 실행되지 않을 수도 있는 개념이다.

보통 프로젝트를 하다보면 DB연결, 네트워크 소켓 연결 등과 같이 시작 시점에 미리 연결한 뒤 어플리케이션 종료시점에 연결을 종료해야 하는 경우 객체의 초기화 및 종료 작업이 필요하다. Bean도 위와 같은 원리로 초기화 작업과 종료 작업이 나눠서 진행된다. 간단히 말해서 객체 생성 → 의존관계 주입이라는 라이프사이클을 가진다.

즉, 스프링 빈은 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다.

0개의 댓글