일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- c언어
- 팀과제
- assume That
- assuming That
- 원격저장소
- 부스트코스
- MVC모듈
- springframeworkruntime
- .out
- 파일삭제
- springsecurity
- GitHub
- Swagger
- springmvc
- Junit5
- 스프링프레임워크
- springboot
- gitbash
- CS50
- securityconfig
- container
- Spring
- DispatcherServlet
- .idea
- swaggerUrl
- MVC
- assume
- 컴퓨터과학
- assume True
- Git
- Today
- Total
도담이 먹여 살려야하는 집사
[Spring] Container & Ioc & DI 본문
Container (컨테이너)
인스턴스의 생명주기를 관리
생성된 인스턴스들에게 추가적인 기능을 제공
>> Servlet 클래스를 실제 인스턴스화 하는 과정을 직접 하지는 않음 >> 이건 tomcat이 대신해줌
Servlet을 대신 실행시켜주는 WAS는 Servlet 컨테이너를 가지고 있음을 알 수 있음.
WAS는 웹브라우저로부터 Servlet URL에 해당하는 요청을 받으면 Servlet을 메모리에 올린후 실행
>> JSP파일도 마찬가지
Ioc(Inversion of Control)란? >> 제어의 역전
개발자는 프로그램의 흐름을 제어하는 코드를 작성함
근데 이 흐름의 제어를 개발자가 하는것이 아니라 다른 프로그램이 그 흐름을 제어하는 것을 IoC라고 함.
DI(Dependency Injection) >> 의존성 주입
DI는 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말함.
프레임워크(Framework) 기반의 개발에서는 프레임 워크 자신이 프름을 제어하는 주체가 되어 필요할 때마다 애플리케이션 코드를 호출해서 사용
프레임워크에서 제어권을 가진 것 : Container(컨테이너)
객체에 대한 제어권이 개발자로부터 컨테이너에게 넘어가면서 객체의 생성부터 생명주기 관리까지 모든것을 컨테이너가 도맡아서 하게됨
>> 일반적인 제어권의 흐름이 바뀌었다고 함 >> Ioc라고 부름
▷ Ioc / DI가 적용되지 않은 경우

public class Engine {
}
class Engine {
}
class Car {
Engine v5 = new Engine();
}
>> 동적으로 구현 클래스를 정해주기 어려운 점이 있음.
▷ Ioc / DI가 적용 된 경우

//엔진 type의 V5변수에 아직 인스턴스가 할당되지 않음.
//컨테이너가 V5변수에 인스턴스를 할당해 주게 됨
@Component
class Engine {
}
@Component
class Car {
}
@Autowired
Engine V5;
- 우선 사용할 객체들을 컨테이너에 등록
- 애플리케이션 코드에서 해당 객체를 setter함수의 매개변수로 받아와 실행시 동적으로 의존관계를 설정
- >>구체적인 클래스의 이름이 애플리케이션 코드에 등장하지 않기 때문에 동적으로 구현클래스를 정해줄 수 있게됨.
IoC/DI를 사용하면 객체를 생성할 때에, 해당 객체가 참조하고 있는 다른 객체에 대한 종속성을 애플리케이션 코드 외부(Container)에 설정하게 함으로써 결합도는 낮추면서 유연성과 확장성 확장
참고 :
kgmyh.github.io/blog/2017/12/04/spring-boot-chapter02/
SpringBoot Reference번역 - Part02:시작하기(Getting Started)
스프링 부트 part2 번역. 시작하기(Getting started) 챕터
kgmyh.github.io
세 가지 DI 컨테이너로 향하는 저녁 산책
애플리케이션 코드를 작성할 때, 특정기능이 필요하면 라이브러리를 호출하여 사용하곤 합니다. 프로그램의 흐름을 제어하는 주체가 애플리케이션 코드인 셈이지요. 하지만 프레임워크(Framework
www.nextree.co.kr
'Spring' 카테고리의 다른 글
[Spring Security] Security Config - Swagger Url (0) | 2020.12.28 |
---|---|
JavaConfig2[SwaggerConfig/WebMvcContextConfiguration] (0) | 2020.12.21 |
JAVAConfig[ApplicationConfig/DBConfig] (0) | 2020.12.01 |
Spring Framework? (0) | 2020.10.26 |