본문 바로가기
Tech/Spring | Spring Boot

[Spring] 의존성 주립(DI) 이란 ? 쉽게 알려줄게!

by 싱브이 2024. 4. 29.
728x90
반응형

엄청 많이 들어봤겠지만 스프링 프레임워크는 의존성 주입(Dependency Injection, DI)을 적용할 수 있는 객체지향 프레임워크이다. 

 

의존성 주입은 객체의 생성과 관계를 효과적으로 분리할 수 있는 방법에 대한 고민으로 나온것이다!

 

* IoC 란

IoC(Inversion of Control)라는 제어의 역전으로, 인스턴스를 제어하는 주도권이 역전된다는 의미이다. 즉, 메서드나 객체의 호출을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것! (그러니까 우리는 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입함)

 

*DI 란

DI(Dependency Injection)는 IoC에 포함되는 것으로 IoC를 이루기 위한 디자인 패턴 중 하나이다. 객체를 직접 생성하는 것이 아닌 외부에서 생성 후 주입 시켜주는 것! 

 

과거에는 의존성을 해결하기 위해 컨트롤러에서 직접 서비스 객체를 생성하거나 하나의 객체를 생성해서 활용했는데,

스프링 프레임워크는 XML 설정이나 자바 설정으로 할 수 있다.

 

*참고: 빈(Bean) : 스프링이 관리하는 객체들

*Application Context: 빈을 관리하는 공간

*@Autowired: 멤버 변수에 주입하는 필드 주입(Field Injection)

*룩업(lookup): DI 컨테이너에서 빈을 가져오는 것

 


1. XML 설정

 

스프링 프레임워크는 자체적으로 객체를 생성하고 관리하면서 필요한 곳으로 객체를 주입(inject)한다.

'WEB-INF' 폴더에 New > XML Configuration File > Spring Config 선택 'root-context.xml' 파일 생성

<bean class="com.example.패키지명.폴더명.클래스명"></bean>

 

ApplicationContext는 'root-context.xml'을 이용해서 스프링이 실행되고 ApplicationContext객체가 생성된다.

 

 

2. 자바 설정

 

자바 클래스에 @Configuration, 메서드에 @Bean 어노테이션을 사용해서 DI 컨테이너에 빈으로 등록한다.

@Bean
UserService userService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
	. . .
}

 

 

3. 마커 어노테이션(Marker Annotation)

 

@Component 어노테이션으로 DI 컨테이너에 빈을 자동으로 등록한다. (컴포넌트 스캔)

@Component
public class UserRepositoryImpl implements UserRepository {
    . . .
}

 

*Autowiring : DI 컨테이너가 자동으로 필요로하는 의존 컴포넌트를 주입하는 과정

 

@Component가 붙은 빈 클래스는 컴포넌트 스캔이 이루어지고, 생성자에 @Autowired가 붙으면 Autowiring이 된다.

 

 

 

 

728x90
반응형

댓글