티스토리 뷰

스프링 프레임워크의 가장 중요한 특징은 객체의 생성과 의존관계를 컨테이너가 자동으로 관리 한다는 점이다.

 

컨테이너

컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록하는 것이라 할 수 있다.

다시말해, 컨테이너란 당신이 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다. 컨테이너는 적절한 설정만 되어있다면

누구의 도움없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다.

쉽게

프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로서 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다. (정확히 말하자면 컨테이너가 맘대로 객체를 생성하는 게 아니라 프로그램을 이용하는 이용자의 호출에 의해 컨테이너가 동작하게 되는 구조이다.)

 

 

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의 개념입니다.

(객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것)

 

이렇게 하는 가장 큰 이유는

 

생성자 호출 뿐만 아니라, 생성된 객체의 생명주기 관리까지 모든 객체에 대한 제어권을 프레임워크(컨테이너)에게 주면서

개발자비즈니스 로직에만 신경 쓸 수 있도록 해주는 겁니다.

 

IoC/DI

 

 

 

 

참고

http://www.nextree.co.kr/p11247/

https://limmmee.tistory.com/13?category=654011

https://thiago6.tistory.com/8?category=827160

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함