[Spring] Dependency Injection

2023. 10. 24. 16:53
728x90

대체 의존성 주입이 뭔지 1~~~~~~도 몰랐는데...

오늘 드디어 쪼금 이해한거 같다.... (됴륵)

레츠고~~~

 

 


 

 

 

매번 new 연산자로 생성해주는 것이 아니라,

외부 컨테이너 (Factory/ IoC(Inversion of Control) Container/ 스프링 컨테이너)에서 인스턴스를 대신 생성(주입) 해주는 설정을 하여 클래스 간의 결합도를 낮추는 것! 

==> DI를 활용한 느슨한 결합 (loose coupling)

 

클래스 A 에서 클래스 B의 인스턴스를 생성하고 메서드 호출하는 방식을 사용했었다. 

그러면 두 클래스는 직접적인 연결이 되어있음. > 그러면 클래스 B가 변경되면 클래스A도 함께 변경되어야 한다는 불편함이 있다. 

 


** IoC(Inversion of Control) 제어의 역전?

: 어떤 객체가 의존성을 해결할 때, 자신이 직접 해결하는 것이 아니라 외부(Factory)에 의해 해당 의존성을 전달 받음.

이 때 의존성 제어 방식이 역전되었다고 표현한다. 이것이 제어의 역전! 

  • 보통 스프링에서 사용되는 IoC Container는 "ApplicationContext" ! BeanFactory를 확장(extends, 상속)한 인터페이스. (팩토리 메소드 패턴 참고.)

** ApplicationContext의 구현체 및 구현 방식

1. XML 기반 (legacy) 

2. Annotation 기반 > 제일 많이 사용됨

3. Java 파일/코드 기반

(** XML 기반: 문자열 형식으로 아이디, 클래스를 설정하기 때문에 오타가 나도 오류가 나지않아 눈치채기 힘들다..)

> Annotation 기반으로 바뀌면서 해결..

** Dependency Injection (의존성 주입)

: 스프링 컨테이너 내에 존재하는 의존성(bean)을 주입하는 과정

 

주입 적용 방법

  1. Field 기반 주입
  2. setter 기반 주입
  3. 생성자 기반 주입 >> 제일 많이 사용됨/ 권장됨.
  4. 커스텀 메서드(Factory) 기반 주입

 

https://hehesim.tistory.com/55

 

[Spring] XML 기반 컨테이너 구성

** 전과 같이 MyRoom (main) + Tape + TapeReader 클래스 활용. - MyRoom main --> XML 기반 컨테이너 구성 - Tape --> getter, setter 설정 - TapeReader --> setTape 설정 1. Setter 기반 주입 1) setter-config.xml 파일 생성 해당 링크

hehesim.tistory.com

https://hehesim.tistory.com/56

 

[Spring] Annotation 기반 컨테이너 구성

** 전과 같이 MyRoom (main) + Tape + TapeReader 클래스 활용. - MyRoom main --> Annotation기반 컨테이너 구성 - Tape --> @Value 애너테이션 - TapeReader --> @Autowired 애너테이션 사용 1. Field 기반 주입 1) annotation-config-fie

hehesim.tistory.com

https://hehesim.tistory.com/57

 

[Spring] component 태그 활용 의존성 주입

** 전과 같이 MyRoom (main) + Tape + TapeReader 클래스 활용. - MyRoom main --> component-scan 컨테이너 구성 - Tape --> @Component로 bean으로 등록 / @Value 애너테이션을 생성자로 이동 - TapeReader --> @ Component 활용 bean

hehesim.tistory.com

 

728x90

BELATED ARTICLES

more