-
[스프링] 의존성 주입1Spring 2022. 10. 3. 09:59
1. 의존이란?
- 의존성 주입(Dependency Injection)중 Dependency로 객체간 의존을 의미
- 클래스내 메서드를 통해 기능을 구현하는데 있어, 이미 구현된 다른 클래스(or Library)의 기능을 가져다 사용하게 될 경우 우리는 의존한다라고 정의함. (Class A에서 Class B의 기능을 가져다 쓰는 경우, Class A가 Class B에 의존한다라고 함)
public class MemberRegisterService { private MemberDao dao = new MemberDao(); ...생략... public Long regist(RegisterReqDto reqDto) { // 'MemberDao' class의 'selectByEmail' Method를 통해 member객체를 가져오고 있음 // 'MemberRegisterService' class가 'MemberDao' class에 의존한다! Member member = dao.selectByEmail(reqDto.getEmail()); ...생략... } }2. 의존성 주입을 통한 의존 처리
- 어플리케이션 위의 샘플 코드와 같이 구현된 다른 클래스의 기능을 사용하는 경우가 빈번
- 이런 의존성을 가지는 객체를 외부에서 주입해 사용하는 방식을 의존성 주입(Dependency Injection)이라 한다.
public class MemberRegisterService { private MemberDao dao; public MemberRegisterService(MemberDao dao) { this.dao = dao; } public Long regist(RegisterReqDto reqDto) { // 'MemberDao' class의 'selectByEmail' Method를 통해 member객체를 가져오고 있음 // 'MemberRegisterService' class가 'MemberDao' class에 의존한다! Member member = dao.selectByEmail(reqDto.getEmail()); ...생략... } }- 스프링 프레임워크는 이런 의존성 주입에 사용되는 객체를 빈(Bean)으로 정의하며 이를 스프링 컨테이너에 등록하여 관리한다.
- 스프링 컨테이너
- 의존성을 가지는 객체를 생성하고 관리하며 의존관계를 연결해주는 객체
- 설정파일(.yml, .xml)또는 자바 코드 내 @Configuration 어노테이션이 선언된 class내 @Bean 어노테이션에 적힌 메서드를 호출하여 반환된 객체를 컨테이너에 등록하며 이를 스프링 빈(Spring Bean)이라 한다.

- org.springframework:spring-context 의존의 org.springframework.context 패키지 내 ApplicationContext 인터페이스의 구현체 빈을 관리하는 BeanFactory를 상속받아 확장시킨 클래스이므로 ApplicationContext를 주로 사용

- 스프링 컨테이너 사용 예제\

3. 의존성 주입과 의존 객체 변경의 유연함
- 여러 클래스에서 의존하는 스프링 빈의 경우, 수정할 때마다 모든 의존 관계의 클래스가 영향을 받게된다.
- 이 때, 생성자 주입 또는 수정자 주입 방식을 사용하여 수정 범위를 줄여 유지보수 효율성을 올릴 수 있다.
- 이후 6장에서 다룰 예정
4~5. 예제 프로젝트 생략

'Spring' 카테고리의 다른 글
[스프링] Aspect Oriented Programming (AOP을 이용한 로깅파일 구성) (0) 2023.08.05 SOLID 원칙 (0) 2023.02.21 MVC모델의 정의, 장점 (0) 2023.02.08 [스프링] 컴포넌트 스캔 (0) 2022.10.03 [스프링] 의존성 주입2 (0) 2022.10.03