IT/개발

[SpringBoot] DI(의존성 주입)

Terriermon 2021. 9. 19. 18:43

의존성 주입(Dependency Injection)이란

 

- 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴

- 인터페이스를 사이에 둬서 클래스 레벨에서 의존관계가 고정되지 않도록 런타임 시에 관계를 다이나믹하게 중집

 

예시

public Class DI{

	// 강한 결합
    // private로 선언되어 있어서 오류가 난다.
    public static void companyTest1(){
       Company c1 = new Company();
    }
    
    // 약한 결합
    // DI로 인해 오류가 나지 않는다.
    public static void companyTest2(Company c){
    	Company c2 = c;
    }
}

class Company{
    String empNo;
    String empName;
    private Company() {}
}

Company라는 클래스를 선언했을 때, 생성자가 private이기 때문에 companyTest1에서는 Company 생성자에 접근할 수 없다.

 

그러나 companyTest2에서는 인수로 받은 Company 변수를 받기 때문에 정상적으로 작동한다.

 

 

DI Annotation

 

@SpringBootApplication

- @Configuration: 자바 코드로 작성된 클래스를 설정 파일로 지정

- @EnableAutoConfiguration: Spring Application Context 생성 시 지정해둔 설정 값을 이용해 자동으로 설정

- @ComponetScan: 지정한 위치 이하에 있는 @Component와 @Configuration이 붙은 Class를 스캔해 Bean에 자동 등록

- @Configuration: 클래스를 스프링 설정으로 사용

- @Bean: 메서드의 리턴 값을 빈 객체로 사용

 

Bean
- 스프링이 직접 생성과 제어를 담당하는 객체

BeanFactory
- 스프링의 IoC를 담당하는 핵심 컨테이너
- Bean 등록, 생성, 조회, 반환 담당
- BeanFactory를 확장한 ApplicationContext를 사용

ApplicationContext
- Bean 관리 + 추가 서비스 제공

 

// 추후 코드 추가..