Web Programming/SPRING

[SPRING] 2-1. DI를 이용한 객체 생성 (1)

JEONGGI 2021. 9. 11. 19:39

DI를 이용한 객체 생성에 대해서 알아보겠습니다.

먼저 IOC(inversion Of control) 컨테이너를 이해하는 시간을 가져봅시다. 스프링컨테이너를 IOC컨테이너 즉, 컨테이너라고 합니다. 스프링 빈을 생성,관리하는 객체를 뜻하며 서블릿 컨테이너에서 httpServlet 클래스를 상속하여 작성한 서블릿을 관리 하는 것과 유사합니다.

서블릿 컨테이너를 통해 서블릿을 관리할 때 얻을 수 있는 점은 url을 호출했을 때 매핑된 서블릿의 service 메소드를 호출 할 수 있습니다. 이는 개발자가 servlet 코드를 직접 실행하지 않아도 되며 실행에 대한 제어가 서블릿 컨테이너에게 있다는 것입니다. 개발자는 servlet 스팩에 맞도록 서블릿을 작성하기만 하면됩니다.

DI(Dependency Injection)에 대해서 알아보겠습니다. DI는 의존성 주입이라고 하며, 의존성을 고여하여 필요한 객체를 setter, 생성자를 통해서 제공하여 설정하는 작업을 말합니다. 

reflection은 생성되어있는 객체를 필드나 메소드에 접근 가능한것을 말합니다. @Autowire, @Resource, @Inject을 이용하며 service 객체에서 필요한 dao 객체를 setter를 통해 주입하기 위해서는 위와같이 <bean>을 이용해서 boardService가 의존하는 boardDao 스프링빈을 setter 메소드를 통해 주입할수 있습니다.

DL(Dependency Lookup)에 대해서 알아보겠습니다. DL은 의존 검색을 뜻하며 컨테이너로 부터 관리되는 빈을 요청하는것을 말합니다. DL은 개발자가 필요한 빈을 요청한 것입니다.

boardDao 객체를 속성으로 갖는 boardService 객체를 사용하는 코드를 작성해보겠습니다.

먼저 Class를 이용한 객체를 생성하는 방법입니다 BoardServiceImpl 타입의 boardService를 선언하여 사용합니다. 

Interface를 이용한 객체생성 방법을 보겠습니다 BoardService 인터페이스 타입의 boardService를 선언하여 사용합니다.

Factory Pattern을 이용한 방법을 살펴보겠습니다. Factory pattern은 객체의 생성에 대한 부분을 은닉하는것을 말합니다. 형태는 간단해 졌지만, 지금까지 없던 Factory class에 의존성이 생겼습니다. 스프링 컨테이너에 객체를 관리하는 컨테이너를 줄 것입니다. 다음에는 IOC를 이용한 방법을 살펴보겠습니다.