Spring IOC
: (Inversion Of Control) 제어의 역전
Ex) DAO 클래스의 DB커넥션 얻어오는 메소드.
-> 커넥션 얻어오는 기능을 하는 Conn 클래스로 분리
-> DAO 클래스는 Conn 클래스를 받아 DB와 연결 후 기능 수행 (생성자나 메소드로 받음)
-> 받는 부분을 Conn 인터페이스로 한다면 Conn 구현체를 바꿔가며 사용할 수 있어서 DAO는 연결설정과 관련없이 동작가능
원래는 Conn 클래스를 new하는 형식으로 구현되어있겠으나(직접 생성 및 사용) 이것을 위처럼 바꾸면
제 3자가 Conn 클래스를 넘겨주는 것이므로 제어가 역전되었다고 하는 것이다! (오브젝트에 대한 제어권이 넘어감)
Spring DI
: (Dependency Injection) 의존 관계 주입
위의 예시에서 DAO 클래스는 Conn 클래스를 넣어야 동작이 가능한데 이 Conn을 넣는 부분을 의존관계 주입이라고 한다.
위의 DAO , Conn 을 스프링을 통해 처리한다면 해당 오브젝트들은 '빈 (Bean)'으로 관리될 것이다.
Spring에서 IOC를 위한 일련의 작업을 하는 해주는 IOC컨테이너를 '빈 팩토리 (Bean Factory)' 라고 함.
그리고 이것을 좀 더 확장한 '어플리케이션 컨텍스트 (ApplicationContext)' 가 있다.
(이들은 Spring이 제공하는 인터페이스이다)
어플리케이션 컨텍스트에서는 '빈' 오브젝트들을 관리한다.
모든 빈은 '싱글톤 (Singleton)' 으로 관리된다. 완전 싱글톤이아니라 '싱글톤 레지스트리'로 관리된다 싱글톤보다 발전한 방식.
- 때문에 매 요청마다 인스턴스를 생성하지 않아 메모리를 효율적으로 사용할 수 있다.
- 하지만 객체가 '상태' 정보 등을 가진다면 위험하다. 한 인스턴스를 공유하기 때문에 이곳저곳에서 값이 바뀌게 될것.
Spring 에서 DI를 설정 하는 방식에는 2가지가있다.
1. Xml을 통한 설정 ( 예전방식. Ex. <servlet-mapping> </servlet-mapping> )
2. Annotation을 통한 설정 ( 요즘 방식. Ex. @Controller 등)
IOC , DI 에 대해 쉽게 설명되어 있는 글 : https://joont.tistory.com/135
'Spring&Spring Boot' 카테고리의 다른 글
(Spring Controller Logging) Spring에서 http request 로깅하기 - 1 (0) | 2020.01.06 |
---|---|
(Spring)(Pageable) Page<F>에서 Page<T>로 바꾸는 클래스 (0) | 2019.06.18 |
(Spring)(Pageable) Page 객체의 구현체 PageImpl의 커스터 마이징 (0) | 2019.06.18 |
(Spring Boot) 사용자 Class를 Bean 객체로 간단하게 설정하기 / Bean 객체 등록 (0) | 2018.10.31 |
(Spring Boot) @Transactional 이란? / @Transactional에 대하여 (0) | 2018.10.10 |
댓글