MVC란 모델-뷰-컨트롤러(Model-View-Controller)로 소프트웨어 공학에서 사용되는 sw 디자인 패턴이다.
Spring MVC는 MVC 패턴 기반의 웹 프레임 워크를 의미한다.
"앞선 내용에서 말했던 스트럿츠2가 사용한다는 MVC Model2가 이거였군..!"
이해는 했지만 글보다 그림으로 보면 더 오래 기억할 수 있을 거 같아 찾아보았습니다.
실제 코드로 한번 볼까요?
class A
{
private B b;
public A(){
b = new B(); // 안에서 생성
}
}
class A
{
private B b; // new를 통해 생성하지는 않습니다.
public void setB(B b){ // 외부에서 생성된 B의 값을 setter를 통해 주입해줍니다.
this.b = b;
}
}
조립형은 A라는 부품에 B라는 부품을 따로 만들어 setB(B)를 통해 조립해준다는 방식으로 생각하시면 됩니다.
그리고 주입에는 두가지 방법이 있다고 합니다.
제어의 역전이란 의미로, 클라이언트가 객체를 제어하지 않고 외부에서 제어하여 객체를 관리하는 것을 의미합니다.
어떤 객체가 사용할 객체를 직접 선언하여 사용하는 것이 아닌 방법을 통하여(setter, 생성자 등) 주입 받아 사용하는 방식을 뜻합니다.
Bean의 생성과 설정 및 관리를 맡고 있다.
BeanFactory를 상속받고 있기 때문에, BeanFacotry와 같은 일을 한다고 볼 수 있다.
컨테이너 안에 들어있는 객체들로, 사용하려면 컨테이너에서 가져와야한다.
여러 annotation을 사용하여 일반적인 객체를 bean으로 등록할 수 있다. 또한 Bean에 등록되어 있는 객체들을 쉽게 주입받아 사용할 수 있다.
의존성 주입은 bean끼리만 가능하다고 한다.
객체를 Bean으로 등록할 때, 아무 annotation을 붙이지 않으면 Bean들이 싱글톤 scope로 등록된다.
미리 컨테이너 안에 만들어둔 하나의 객체를 사용하기 때문에 메모리나 성능 최적화에 유리하다고 한다.