인터페이스 2일차 (DI & IoC)
2023. 1. 4. 12:34ㆍ코딩배움일지/인터페이스 구현
Dependency
- 의존성
- 클래스 또는 코드가 다른 클래스 또는 코드에 의존적일 때 이를 의존성이 있다고 함
의존성을 완전히 배제할 수 없다.
package dependcy;
import controller.MainController;
public class Main {
public static void main(String[] args) {
MainController mainController = new MainController();
mainController.hello(); /*MVC 패턴*/ /*MainService가 먼저 작성되어야 한다.*/
}
}
package controller;
import service.MainService;
public class MainController {
private MainService mainService;
//MainController class는 MainServie class에 의존하고 있다
public MainController() {
this.mainService = new MainService();
}
public void hello() {
mainService.hello();/*그래야 쓸수 있다.*/ /*무조건 의존이 발생해야 쓸수 있는 형태*/
}
}
package service;
public class MainService {
public void hello() {
System.out.println("Hello");
}
}
DI
- Dependency Injection (의존성 주입)
- 클래스가 의존하는 다른 클래스들을 외부에서 주입함 (외부에서 생성된 객체를 사용)
- 클래스간 의존성을 약하게 함
- 유지보수의 편리성 제공
- 생성자를 이용한 주입 / Setter를 이용한 주입
생성자를 이용한 주입
주로 쓴다
/*컨트롤러*/
//1. Constructor(생성자)를 이용한 DI 구현
public MainController(MainService mainService) {
this.mainService = mainService;
}
/*메인*/
// Constructor를 이용하연 DI가 구현된 MainController
MainService mainService = new MainService();
MainController maControllerDi1 = new MainController(mainService);
Setter를 이용한 주입
세터 형식은 계속 생성해야한다.
/*컨트롤러*/
//2. Setter 메서드를 이용한 DI 구현
public void setMainService(MainService mainService) {
}
/*메인*/
// Setter 메서드를 이용하여 DI 가 구현된 MainController
MainController mainControllerDi2 = new MainController();
mainControllerDi2.setMainService(mainService);
}
사용자 지정 의존성 주입의 문제점
여러개가 있으면 많은과정을 다 해야함. 의존성이 연해졌을뿐 불편한것 똑같다. 유지보수상의 유리함만 있을 뿐
IoC
- Inversion of Control (제어의 역전)
- 컴퓨터 프로그램의 사용자 지정 작성 부분이 일반 프레임워크에서 제어의 흐름을 받는 디자인 패턴
- 기존의 절차적 프로그래밍에서는 프로그램의 목적을 표현하는 사용자 지정 코드가 라이브러리를 호출하지만 IoC에서는 프레임워크가 사용자 지정 코드를 호출
개발자가 작성하는 권한을 프레임 워크에 넘기는것
코드를 대신 작성하게 하는 것을 어노테이션
이득
Spring IoC를 이용한 DI
@Service
public class MainService {
@Autowired LoginService loginService;
@Autowired UserUpdateService userUpdateService;
@Autowired SessionService sessionService;
@Autowired LogService logService;
}
@Service
public class LoginService {
@Autowired EventService eventService;
@Autowired UserService userService;
@Autowired User user;
}
@Service
public class UserUpdateService {
@Autowired EventService eventService;
@Autowired UserService userService;
@Autowired User user;
}
@Service
public class User {
@Autowired JDBCConnection connect;
...
}
- Spring IoC는 어노테이션 기반, XML 기반, 자바 기반의 설정을 제공
- 이를 사용하기 위해서는 사전에 XML 설정이 필요
- Spring Boot를 사용하면 Stand-alone Production 의 스프링 기반 애플리케이션을 쉽게 구동할 수 있음
- Stand-alone Production : 해당 애플리케이션을 실행하기 위해 타 애플리케이션이 필요하지 않음
'코딩배움일지 > 인터페이스 구현' 카테고리의 다른 글
인터페이스 3일차 (DTO) (0) | 2023.01.05 |
---|---|
인터페이스 3일차 (Controller) (0) | 2023.01.05 |
인터페이스 2일차 ( Spring Framework & Dispatcher Servlet) (0) | 2023.01.04 |
인터페이스 구현 2일차 (Spring Framework, SOLID) (0) | 2023.01.04 |
인터페이스 구현 1일차 () (1) | 2023.01.03 |