DI / 의존관계, 의존성 주입
1. 클라이언트 코드의 변경 없이 기능 확장 가능
2. 부품을 교체하듯 개발 가능
3. 애플리케이션 실행 시점에 실제 생성된 객체 인스턴의 참조가 연결되는 것을 의존관계 주입이라 합니다.
4. 의존관계 주입을 사용하면 클라이언트 코드를 미 변경하고 클라이언트가 호출하는 대상의 인스턴스를 변경 가능합니다.
5. 의존관계 주입을 사용하면 정적인 클래스의 의존관계를 미 변경하고 동적인 객체 인스턴스 의존관계를 쉽게 변경 가능합니다.
IoC / 제어의 역전
구현 객체가 프로그램의 제어 흐름을 스스로 컨트롤하는 것은 개발자 입장에서
자연스럽지만 외부에서 관리하는 것을 제어의 역전이라 합니다.
프레임워크가 내가 작성한 코드를 제어하고 대신 실행하면 그것을 프레임워크라 하지만
재가 작성한 코드가 직접 제어의 흐름을 담당하면 그것은 라이브러리입니다.
즉 스프링 프레임워크가 프로그램을 스스로 제어하는 것을 제어 역전이라 합니다.
스프링 컨테이너
Ioc, DI 컨테이너 : 의존관계 주입을 대신 객체가 생성, 관리하면서 의존관계를 연결해주는 것입니다.
여기서 말하는 자바 객체를 스프링에서는 빈이라고 부릅니다.
각 메서드에 @Bean 사용하는 경우 컨테이너에 자동으로 등록됩니다.
개발자가 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성, 소멸 가능한데 이 역할을 하는 게
스프링 컨테이너가 대신합니다.
제어 흐름을 외부에서 관리하는 것이고 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 자동으로
만들어 줍니다.
스프링 컨테이너 종류
BeanFactory : 스프링 컨테이너의 최상위 인터페이스입니다.
빈을 등록, 생성, 조회하고 돌려주는 등 빈을 관리하는 역할
ApplicationContext : BeanFactory 기능을 상속받아 제공합니다.
차이점
ApplicationContext 가 BeanFactory자체를 상속을 받은 것은 아니고 빈을 관리하는 기능을 물려받아 사용됩니다.
ApplicationContext 은 국제화가 지원되는 텍스트 메시지 관리, 이미지 같은 파일 자원을 로드, 리너스로 등록된 빈에게
이벤트 발생 알림 등 부가적인 기능을 가지고 있습니다. 그러므로 스프링 컨테이너를 ApplicationContext를 뜻 합니다.
싱글톤 컨테이너
객체의 인스턴스를 싱글톤으로 관리하여 불립니다.
AppConfig 클래스를 읽어 만든 빈 목록에 존재하는 임의의 빈을 여러 번 호출하여 그 빈들의 주소는 같습니다.
'백수 > Spring' 카테고리의 다른 글
ORM(Object Relation Mapping) (0) | 2023.07.14 |
---|---|
영속성(Persistence) (0) | 2023.06.20 |
Spring 프레임워크 (0) | 2023.05.31 |
어노테이션 기초 정리 (0) | 2023.05.30 |
Spring 기초 (0) | 2023.05.23 |