티스토리 뷰
스프링 프레임워크의 가장 중요한 특징은 객체의 생성과 의존관계를 컨테이너가 자동으로 관리 한다는 점이다.
컨테이너
컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록하는 것이라 할 수 있다.
다시말해, 컨테이너란 당신이 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다. 컨테이너는 적절한 설정만 되어있다면
누구의 도움없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다.
쉽게
프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로서 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다. (정확히 말하자면 컨테이너가 맘대로 객체를 생성하는 게 아니라 프로그램을 이용하는 이용자의 호출에 의해 컨테이너가 동작하게 되는 구조이다.)
DI (Dependency Injection, 의존주입)
의존관계에 있는 객체를 생성하지 않아도, 그 종속객체를 사용할 수 있는 것
의존관계란 하나의 객체에서 다른 하나의 객체를 사용하는 관계
public class A {
B b = new B();
public void method1(){
b.method1();
}
}
위에 코드처럼 A 클래스 내에서 B 클래스를 사용한다면
B 클래스 가 변한다면 A 클래스 가 변하기 때문에 의존관계에 있다고 할 수 있다.
현재 스프링에서 지원하는 의존주입으로는 Constructor Injection, Setter Injection 이 존재한다.
Constructor Injection ::: 생성자를 이용한 의존성 주입
필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.
public class A {
private B b;
public A(B b) {
this.b = b
}
}
Setter Injection ::: setter() 메소드를 이용한 의존성 주입
의존성을 입력받는 세터(setter) 메소드를 만들고 이를 통해 의존성을 주입한다.
public class A {
private B b;
public void setA(B b) {
this.b = b;
}
}
IoC (Inversion of Control, 제어의 역전)
위와 같이 객체를 생성하지 않아도 사용 가능한 이유는 IOC 때문이다.
제어의 역전 즉 외부에서 제어를 한다는 것
IoC란 바로 위에서 설명한 컨테이너이다.
B 클래스의 생성자 호출의 제어 권한은 B에게 있습니다.
하지만 B의 제어권한을 컨테이너에게 주는 것이 바로 IoC의 개념입니다.
(객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것)
이렇게 하는 가장 큰 이유는
생성자 호출 뿐만 아니라, 생성된 객체의 생명주기 관리까지 모든 객체에 대한 제어권을 프레임워크(컨테이너)에게 주면서
개발자는 비즈니스 로직에만 신경 쓸 수 있도록 해주는 겁니다.
참고
http://www.nextree.co.kr/p11247/
- Total
- Today
- Yesterday
- fuction
- import
- Eclipse
- {}
- error
- 렉시컬스코프
- homebrew
- API
- 중괄호
- DI
- MySQL
- REST
- STS
- Github
- Java
- IntelliJ
- 동적스코프
- 컨테이너
- 함수
- JavaScript
- Gradle
- IOC
- SWAGGER
- SpringBoot
- react
- IDE
- mysql.server
- 정적스코프
- restful
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |