ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링] 의존성 주입1
    Spring 2022. 10. 3. 09:59

     

     

    1. 의존이란?

    1. 의존성 주입(Dependency Injection)중 Dependency로 객체간 의존을 의미
    2. 클래스내 메서드를 통해 기능을 구현하는데 있어, 이미 구현된 다른 클래스(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. 의존성 주입을 통한 의존 처리

    1. 어플리케이션 위의 샘플 코드와 같이 구현된 다른 클래스의 기능을 사용하는 경우가 빈번
    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

    댓글

Designed by Par3k