[Spring Framework] - POJO & IoC/DI

김수빈·2022년 6월 14일
0

Spring

목록 보기
2/8

Spring의 특징

Spring 의 삼각형

POJO (Plain Old Java Object)

Pojo 란? - 무거운 객체의 생성을 반대하는 용어

POJO를 지키기 위해선

1. Java나 Java의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다

  1-1. 미리 정의된 클래스를 확장하지 않는다.

  1-2. 미리 정의된 인터페이스를 구현하지 않는다.

  1-3. 미리 정의된 어노테이션을 포함하지 않는다.

2. 특정 환경에 종속적이지 않아야 한다.

POJO 를 지키기 위해 사용되는 세가지 기술

1. IoC / DI

2. AOP

3. PSA

IoC / DI (Inversion Of Control / Dependency Injection)

IoC

일반적인 자바 콘솔 어플리케이션 - 주도권이 개발자에게 있음

main() 메소드 (Entry Point) 가 필요
main() 메소드가 종료되면 어플리케이션이 종료.

서블릿 컨테이너 - 주도권이 Framework 에게 있음

클라이언트의 요청이 들어올 때 마다 서블릿 컨테이너 안의 컨테이너 로직이 서블릿을 직접 실행 
(어플리케이션의 주도권이 서블릿 컨테이너에게 있음)

DI

IoC 개념을 구체화한 것

의존성이란

MenuController 와 MenuService 라는 클래스가 있다고 가정 해 보자.
Menucontroller 내에서 Menuservice 의 기능을 이용하고 싶을 때, MenuController 클래스는 MenuService 라는 클래스에 의존하는 것이다.

이처럼 MenuController 내에서 MenuService 를 생성해서 사용하므로, 의존 관계가 만들어진 상태이다.

의존성 주입

public class CafeClient{
	public static void main(String[] args){
    	MenuService menuService = new MenuService();
        MenuController controller = new MenuController(menuService);
    }
}

public class MenuController{
	private MenuService menuService;
    
    public MenuController(MenuService menuService){
    	this.menuService = menuService;
    }

}

public class MenuService{
	public List<Menu> getMenuList(){
    	return null;
    }
}

위 코드에선 MenuService 기능을 이용하기 위해서 MenuController 의 생성자로 MenuService 의 객체를 전달 받고 있다.

이처럼 생성자를 통해 클래스의 객체를 전달 받는 것을 의존성 주입, 생성자의 파라미터로 객체를 전달하는 것을 객체를 주입한다 라고 표현한다.

의존성 주입이 필요한 이유

직접적으로 new 키워드를 사용할 경우 객체지향 설계의 관점에서 문제가 발생한다.

new 키워드를 사용하여 객체를 생성하게 되면, 참조해야 할 클래스가 바뀔 경우 모든 부분을 수정해야 한다. (강하게 결합)

그런데! CafeClient 클래스에서도 new 키워드를 사용하여 MenuService 객체를 생성하고 있다. Spring에서 의존성 주입을 해주기 때문에, 실제 Spring으로 클래스를 작성할 때에는 new 키워드가 필요가 없다.

0개의 댓글