스프링 프레임워크 코어기능 : 종속 객체를 조립해주는 도구
하나의 객체가 다른 객체의 의존성을 제공하는 것.
'의존성'이란 예를 들어 서비스로 사용할 수 있는 객체이다. 클라이언트에게 무슨 서비스를 사용할 것인 지 말해주는 것이다. '주입'은 의존성(서비스)을 사용하려는 클라이언트(객체)로 전달하는 것을 말한다. 클라이언트가 서비스를 구축하거나 찾는 것을 허용하는 대신 클라이언트에게 서비스를 전달하는 것이 패턴의 요건이다.
프로그램은 객체들의 조립관계를 통해서 만들어진다.
Compositon has a
(일체형 has a 관계)아래 코드들을 보면 A클래스는 B클래스를 이용하고 있다. 단순히 클래스를 이용하는 것이 아니라 B를 객체화해서 사용하고 있다.
// Compositon has a
class A {
private B b;
public A() {
b = new B();
}
}
위 코드는 A가 B를 사용하기 위해 A가 생성될 때 B를 생성해서 자기가 가지도록 되어 있다. 이런 형태로 사용되고 있는 것을 A가 B를 일체형으로 가졌다라고 해서 이것을 Compositon has a
(일체형 has a 관계)라고 한다. 일체형(붙박이형식)으로 자기의 부품을 가졌다는 뜻이다. 즉, B는 A의 부품이 되는 것이다. 이 부품을 Dependency
라고 하는 것이다.
Association has a
(조립형 has a 관계)A가 직접 객체를 생성해서 갖게 되며 이것을 private하고 사용하는 방식도 있지만 다른 방식도 있다. 아래의 코드를 보자.
// Association has a
class A {
private B b;
public void setB(B b) {
this.b = b;
}
}
생성은 외부에서 생성해서 그 생성을 이 곳에 세팅을 해 그 세팅을 한 객체를 사용하는 방식도 있다. 이것은 세팅을 해야만 사용할 수 있으므로 조립형으로 사용한다고 하여 Association has a
(조립형 has a 관계)라고 한다.
🔼 일체형에 대한 모형
🔼 조립형에 대한 모형
프로그램을 만들 때 일체형보다는 조립형이 결합력이 훨씬 더 낮아지고 조립형의 B부품을 쉽게 갈아 끼울 수 있으므로 일반적으로 일체형보다는 업데이트나 수정을 위해 조립형으로 프로그램을 만드는 경우가 많다.
일체형으로 프로그램을 만들 때는 일체형(붙박이)이므로 사용자 입장에서는 A라는 객체만 만들면 그 안에 부품이 무엇이 있는 지 잘 모르며 또한 그 부품을 바꿔낄 수도 없다.
그런데 조립형으로 만들게 되면 A를 만들 때 A가 갖고 있을 B부품을 따로 만들어서 준비해 이것을 조립해 주어야 한다.
우린 이 B 부품을 Dependency
라고 하고 이 Dependency를 조립하는 과정을 의존성 주입(Dependency Injection)이라고 한다. 이 Dependency를 조립형으로 만들게 되면 Dependency 즉, 부품을 쉽게 바꿔낄 수 있다는 장점이 있지만 부품을 조립해야한다는 단점이 있다.
이 Dependency를 조립하는 데에 2가지 방법이 있다.
1. Setter Injetion
Setter 함수를 통해 조립
2. Constuction Injection
생성자를 통한 조립
스프링 프레임워크에서 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너
인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 컨테이너가 해줌
객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있다.
💡 컨테이너란?
객체의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것