객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring Container에서 필요한 객체를 가져와 사용한다.
객체의 생성부터 소멸까지 객체 생명주기 관리를 사용자가 아닌 특별한 객체에게 맡기는 것
Spring의 IOC란
클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출
이 아닌,
Spring에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출
구조이다.
어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는 것이 아니라,
객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시키는 방식
IOC에서의 DI란
각 클래스 사이에 필요한 의존관계를 Bean 설정 정보를 바탕으로 container가 자동으로 연결해 주는 것
장점
1) 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
2) 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다.
로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있다.
여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법이다.
OOP(Object Oriented Programming)
OOP는 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리하고 낮은 결합도를 갖게 하여 독립적이고 유연한 모듈로 캡슐화하는 것을 의미한다.
하지만 이 과정에서 중복된 코드 증가 및 가독성, 확장성, 유지보수성 감소 문제가 있다.
AOP
OOP를 보완하기 위해,
핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태
무분별하게 중복되는 코드를 한 곳에 모은다.
MVC는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
Controller
사용자가 접근한 URL에 따라 요청을 파악한다.
URL에 맞는 Method를 호출하여 Service와 함께 Business Logic을 처리한다.
최종적으로 나온 결과는 Model에 저장하고, View에 던져준다.
Model
Controller에서 받은 데이터를 저장하는 역할을 한다.
View
Controller로부터 받은 Model 데이터를 바탕으로 사용자에게 표현해준다.
Controller는 RequestMapping을 통해 URL을 확인하여 바로 View에 던져줄지, Service로 들어가 추가적인 Business Logic을 거칠지 결정한다.
HTML과 Java를 분리하여 처리하기에 확정성과 유지보수성이 높다.
Spring은 단순한 서버환경인 톰캣(Tomcat)과 같은 WAS(Web Application Server)가 내장되어 있어 자바 웹 애플리케이션을 구동할 수 있다.
References