스프링 부트 프로젝트로 간단하게 DI개념에 대해서배워보겠습니다.
해당 프로젝트는 가장 빨리 만나는 스프링 부트 서적 예제소스 입니다.
해당 책은 굉장히 얇고 보기 쉽게 되어있습니다.
한권사셔서 읽어보심을 추천드립니다.
스프링 프레임워크(SpringFrameWork) DI란 무엇인가? |
DI란 의존성 주입(Dependency injecion)의 줄임말이며 IOC/DI 스프링프레임워크의 핵심 기술입니다.
IOC와 DI를 분리해서 생각하지 마시고 DI를 IOC 한개념으로 보시면 됩니다.
IOC = DL (Dependency Lookup) 의존성 검색 + DI(Dependency injecion) 의존성 주입
DI를 사용하면 클래스 간의 의존 관계를 자동으로 구성할 수 있습니다.
DI 컨테이너 (보통 컨테이너라고..) 는 인스턴스를 관리하는데 인스턴스를 생성하고 그 인스턴스에 필요한 인스턴스를 설정하여 반환하여 줍니다.
다음과 같은 DI의 이점이 있습니다.
1. DI를 사용하게 되면 애플리케이션 안에 있는 객체 사이의 의존관계가 느슨해집니다.
--> 의존관계가 느슨해지면 유지보수시에 도움이 됩니다.
▼ 변경 전 소스 (Console에서 값을 입력하면 Scanner 객체로 값을 입력받아 덧셈해주는 간단한 프로그램)
public class App { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter 2 numbers like 'a b ' :"); int a = input.nextInt(); // 첫번째 입력값 int b = input.nextInt(); // 두번째 입력값 Calculator calculator = new AddCalculator(); int result = calculator.calc(a,b); System.out.println("result =" + result); } } |
▼ 변경 후 소스 (Frontend 소스를 생성하여 인자값 받는부분과 계산로직을 외부(frontend)로 뺀후 App Class는 호출만함)
App Class
@ComponentScan public class App { public static void main(String[] args) { try(ConfigurableApplicationContext context = SpringApplication.run(App.class, args); //@EnableAutoConfiguration 붙인 클래스 지정하여 @Import 로 Config 파일 찾기 ){ Frontend frontend = context.getBean(Frontend.class); frontend.run();
} } } |
Frontend Class 생성
@Component public class Frontend {
@Autowired//-> DI 컨테이너가 argumentResolver 필드에 맞는 객체를 자동으로 찾아줌 ArgumentResolver argumentResolver;
@Autowired Calculator calculator; /* * 계산 작업 수행 * */ public void run() { System.out.println("Enter 2 numbers like 'a b' :"); Argument argument = argumentResolver.resolve(System.in); // 인자 받는부분 int result = calculator.calc(argument.getA(), argument.getB()); // 계산로직 System.out.println("result =" + result); } } |
상세로직 : 깃허브 주소
2. 인스턴스 스코프를 제어가 가능하다. (스프링은 보통 싱글톤인데 싱글톤으로 생성할지 매번 새로운 객체를 생성할지 에 대한 제어가 가능하다.)
3. 인스턴스 생성할때와 소멸할때를 이벤트처리로 제어할 수 있다.
4. 공통 처리를 포함할 수 있다. (ex) 로깅, 트랜잭션, 보안)
소스 출처 : 가장 빨리 만나는 스프링 부트 서적 참고하여 만든 소스
'스프링 부트' 카테고리의 다른 글
Missing artifact org.lazyluke:log4jdbc-remix:jar:0.2.7 (0) | 2018.05.10 |
---|---|
maven dependency 추가시 유용한 사이트 (방법) (0) | 2018.05.10 |
스프링 부트(Sting boot) 편리하니 사용해보자 스프링로디드(Springloaded) (0) | 2018.04.05 |
스프링 부트(Sting boot) 편리하니 사용해보자 STS 설치편(2) (0) | 2018.04.03 |
스프링 부트(Sting boot) 편리하니 사용해보자 메이븐 설치편(Maven)(1) (0) | 2018.04.03 |