티스토리 뷰

반응형

※ 주의 : 학습한 내용을 이해한 대로 기재했기 때문에 잘못된 내용이 있을 수 있습니다. 잘못된 내용이 있을 경우 댓글로 알려주시면 감사하겠습니다.





1. A 클래스 내에서 B, C 인터페이스를 사용하는 경우

   1) A 클래스 내부에서 B, C 인터페이스의 구현 클래스를 직접 생성해서 할당한다.

      - A 클래스 개발 단계에서 B, C 인터페이스의 구현 클래스가 이미 완성되어 있어야 한다.

      - B, C 인터페이스의 구현 클래스에서 수정이 일어나면 A 클래스 내부의 구현 클래스 생성, 할당 부분도 같이 수정해야 한다.

   2) A 클래스의 생성자 인수로 B, C 인터페이스의 구현 클래스 객체를 사용한다.

      - 1)보다 클래스의 결합도가 낮아진다.

      - A 클래스 생성 시 필요한 구현 클래스 객체는 개발자가 직접 생성해서 주입해야 한다. 

        그래서 B, C 인터페이스의 구현 클래스에서 수정이 일어나더라도 A 클래스 내부에서 수정할 부분은 없어진다. 

        그러나 B, C 인터페이스의 구현 클래스 주입 부분은 여전히 수정이 필요하다.


2. 의존성 주입

   1) 어떤 클래스가 필요로 하는 컴포넌트를 외부에서 생성하고 내부에서 그것을 사용 가능하게 만드는 과정

      - 위의 경우 B, C 인터페이스의 구현 클래스들은 A 클래스가 의존하는 컴포넌트가 된다.

      - B, C 인터페이스의 구현 클래스를 외부에서 생성한 후 그것을 A 클래스 내부에서 사용할 수 있게 하는 것이 의존성 주입이다.

      - 하나의 처리 프로세스에 여러 개의 컴포넌트를 사용하는 경우에 효과적.

   2) IoC(Inversion of Control)라고 하는 소프트웨어 디자인 패턴 중의 하나

      - 제어 역전 : 컴포넌트를 구성하는 인스턴스의 생성과 의존 관계의 처리를 소스코드가 아닌 DI 컨테이너에서 대신하기 때문에 제어가 역전됐다고 봄.

   3) DI 컨테이너 : 의존성 주입을 자동으로 처리하는 기반 (=IoC 컨테이너)

      -  DI 컨테이너에 B, C 인터페이스와 구현 클래스를 알려주고 의존 관계를 정의해주면 A 클래스가 생성될 때 B, C 인터페이스의 구현 클래스가 자동으로 생성되어 주입된다.

   4) 인스턴스 관리

      - 인스턴스의 scope 제어

      - 인스턴스의 생명 주기 제어

      - AOP 방식으로 공통 기능을 집어넣을 수 있음.

      - 의존하는 컴포넌트 간의 결합도를 낮춤. 


3. Spring Framework에서의 의존성 주입

   1) DI 컨테이너 : ApplicationContext

      - @Configuration과 @Bean 애너테이션을 사용해서 DI 컨테이너에 컴포넌트를 등록할 수 있다. 

   2) DI 컨테이너에 등록된 컴포넌트 : Bean(빈)

      - 애플리케이션은 ApplicationContext 인스턴스(DI 컨테이너)를 통해 빈을 가져올 수 있다. 

      - Bean Definition : 빈 정의,  빈에 대한 설정 정보.

      - lookup : 룩업, DI 컨테이너에서 빈을 찾아오는 행위

   3) 빈 설정 방식

      - 자바 기반 설정

      - XML 기반 설정

      - 애너테이션 기반 설정

   4) 의존성 주입 방법

      - Setter Injection(세터 인젝션) 

        : 설정자 기반의 의존성 주입 방식, 설정자 메소드의 인수를 통해 의존성을 주입한다.

      - Constructor Injection(컨스트럭션 인젝션)

        : 생성자 기반 의존성 주입 방식, 생성자의 인수를 사용해 의존성을 주입한다. 

      - Field Injection(필드 인젝션)

        : 생성자나 설정자 메서드를 쓰지 않고 DI 컨테이너를 통해 의존성을 주입한다.

        : 의존성을 주입하고 싶은 필드에 @Autowired 애너테이션을 달아준다.

        : 반드시 DI 컨테이너를 사용한다는 것이 전제. 

          DI 컨테이너 없이 사용되는 독립형 라이브러리로 사용될 소스코드에서는 필드 인젝션을 사용할 수 없다.

   5) 오토와이어링 : Autowiring     

      - 명시적으로 빈을 정의하지 않고도 DI 컨테이너에 빈을 자동으로 주입하는 방식




참조할(아직 보지 못함;;;) 사이트 : https://www.tutorialsteacher.com/ioc/introduction

반응형

'Spring' 카테고리의 다른 글

[SpringMVC] property의 변수를 @Value로 사용하기  (0) 2019.11.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함