DevBoi

[Spring] Bean의 존재 이유와, DI 의 개념 본문

Develop/[Spring]

[Spring] Bean의 존재 이유와, DI 의 개념

HiSmith 2022. 3. 1. 17:52
반응형

여태까지 Config파일을 등록해서 bean을 등록 하고, 해당 config에 빈을 등록한걸 사용도 해보고 했다.

근데 결정적으로 왜?

왜 빈을 사용할까? ioc에 들어가서 관리의 대상이 되는건 알겠는데....

굳이 왜쓰지? class로 쓰면 되는거 아닌가? 싶다

 

그래서 좀더 딥한 개념의 이유와 사용목적에 대해서 공부를 해보자.

 

우선 해당 개념을 이해하기 위해서는 

자바빈 vs 스프링 빈에 대한 차이를 알아야 한다.

자바빈은 DTO,VO와 같이 getter,setter로만 접근이 가능한 자바 파일을 의미한다.

반면 스프링 빈은 IOC컨테이너가 관리하는 JAVA 객체를 의미한다.

 

쉽게 말하면, Bean, Component등을 등록하면 IOC 컨테이너에서 관리가 된다는 의미이다.

그러면 스프링에 제어권을 넘긴다라는 건 알겠는데, 그러면 뭐가 좋고 다른걸까?

 

1. 라이프사이클 관리

스프링 컨테이너 IOC에서 관리하는 빈들은

해당 컨테이너가 생성~ 소멸 등의 라이프사이클을 직접관리한다.

즉 스프링 빈에 등록이되면, new 연산자를 통해서 해당 객체를 생성하는 것이 아니라,

스프링 컨테이너에 등록하고, 해당 컨테이너가 알아서 new, destory를 사용하는 것이다.

 

2.DI 설정

DI는 클래스간의 결합도를 낮추고, 수정 개발이 필요할때 코드 수정을 최소화할수 있도록 해준다.

이런 인터페이스를 활용한 DI는, 스프링 빈으로 등록하면 자동으로 컨테이너에서 지원해주는 기능이다.

 

3. 싱글톤 사용

우선 스프링 빈에서는 싱글 톤을 기본으로 한다.

싱글톤의 원칙은, 요청에 따른 객체 생성이 아닌, 한개의 객체를 생성하고, 이를 요청 때마다 같은 객체를 반환하자 이다.

이는 대규모의 요청에 따라, 매번 신규로 객체를 생성하게 되어, GC에 대한 부하발생을 막아줄수있다.

빈은 싱글톤 스코프로 관리하여, 1개의 요청이 왔을때 여러개의 쓰레드가 빈을 공유 할수 있도록 생성 되었다.

 

이러한 스프링 컨테이너는 싱글톤을 생성하고 관리, 공급하는 컨테이너이기도 하다

 

우선 위와같이 3가지의 장점이 있다는 것만 간략하게 알고,

 

 

 

 

반응형