[Spring] Dependency Injection
대체 의존성 주입이 뭔지 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 기반 > 제일 많이 사용됨
(** XML 기반: 문자열 형식으로 아이디, 클래스를 설정하기 때문에 오타가 나도 오류가 나지않아 눈치채기 힘들다..)
> Annotation 기반으로 바뀌면서 해결..
** Dependency Injection (의존성 주입)
: 스프링 컨테이너 내에 존재하는 의존성(bean)을 주입하는 과정
주입 적용 방법
- Field 기반 주입
- setter 기반 주입
- 생성자 기반 주입 >> 제일 많이 사용됨/ 권장됨.
- 커스텀 메서드(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
'Programming > Spring, SpringBoot' 카테고리의 다른 글
[Spring] XML 기반 컨테이너 구성 (0) | 2023.10.24 |
---|---|
[Spring] pom.xml 작성 (0) | 2023.10.24 |
[Spring] Factory를 통한 의존성 낮추기 (0) | 2023.10.24 |
스프링 시큐리티 인증 절차 (0) | 2023.09.26 |
스프링부트 프로젝트의 기본 구조 (0) | 2023.09.12 |