Spring IoC 컨테이너
IoC (Inversion of Control)
이름에서도 알 수 있듯 제어의 역전을 의미한다.
그렇다면 제어의 역전이 무슨 말일까?
보통 일반적인 프로그램을 작성할 때는 main 함수가 있어서 시작 부분을 자신이 컨트롤 할 수 있는데
프레임워크를 사용할 때는 main 함수에서 SpringApplication.run 을 해줄뿐 내가 작성한 코드는 따로 호출하지를 않는다.
처음 스프링 프레임워크를 사용했을때는 이 부분의 의아했었던 기억이 난다.
이 의아함을 해결해주는것이 바로 IoC 컨테이너이다. 생성하고 초기화 실행 소멸을 알아서 처리하는것이다.
어떤 요청이 들어왔을때 어떤 객체를 어떻게 조작할 것인가 를 대신 수행주는것이 이 컨테이너다.
개발자가 객체를 생성하고 작동하는 로직을 작성하는데만 집중 할 수 있게 도와준다.
결론으로는 프로그램의 진행 흐름이나 객체의 라이프 사이클을 개발자가 직접 하나하나 제어하는것이 아니라
컨테이너에게 제어권이 넘어가는것을 IoC 제어의 역전이라고 한다. 그리고 그것을 관리하는것이 IoC 컨테이너이다.
빈(Bean)
빈은 위에서 말한 컨테이너와 떨어질 수 없는 관계다.
컨테이너를 설명하면서 객체의 라이프 사이클을 관리한다고 말했었는데.
여기서 말한 컨테이너가 관리하는 객체가 바로 빈이다.
빈은 기본적으로 싱글턴으로 작동한다.
싱글턴으로 작동하는 이유는 스프링이 자바 엔터프라이즈 기술을 사용하는 서버환경에서 주로 사용되기 때문이다.
서버 환경이기 때문에 그만큼 많이 사람들이 이용하고 그에 따른 요청의 횟수도 많다.
예를 들어 어떤 클래스에서는 클라이언트에게 요청이 올때마다 객체를 만들어준다면 100번을 요청하면
100개의 오브젝트가 만들어진다.
그런데 해당 페이지에 수 많은 사람이 몰려서 초당 수백번의 요청이 있다고 한다면
서버에 매우 무리가 가는 작업이 된다.
그래서 스프링은 빈들을 싱글톤으로 관리하고 여러 스레드에서 이를 공유하여 사용하게 한다.
기본적으로 @Controller , @ Service , @Repository , @ Componet 어노테이션을 사용하면 해당 클래스를
자동으로 빈으로 등록해준다.
각각의 어노테이션은 내부적으로 기능은 다를게 없지만 역할을 명시적으로 나타내기 위해 구분한다.
그 외에 @Bean 이라는 어노테이션도 있는데 이는 내가 직접 작성한 클래스가 아닌 외부 라이브러리의
객체를 빈으로 등록하고 싶을때 객체를 반환하는 메서드에 붙여서 사용한다.
DI(Dependency Injection)
의존성 주입에 관한 이야기다.
자세한 설명은 아래 링크로 대처하겠다.
'BackEnd > Java Spring' 카테고리의 다른 글
Spring boot 의 구조 (0) | 2020.05.23 |
---|---|
Spring annotation @Component, @Configuration (0) | 2020.05.23 |
스프링 동작 정리-1 (0) | 2020.05.05 |
Spring Framework 의 IoC 컨테이너 / 빈(Bean) / 의존성 주입(DI)개념정리 (0) | 2020.04.14 |
Java Spring - @RequestBody, @ResponseBody 정리 (0) | 2020.04.14 |