본문 바로가기
Spring/Spring

스프링 IoC와 DI

by 작은돼지 2023. 1. 8.

프레임워크와 라이브러리의 차이

프레임워크는 IoC 개념, 애플리케이션의 전체적인 구조와 흐름을 제공,

개발자는 프레임워크의 규칙과 구조에 맞춰서 개발해야 함

라이브러리는 개발자가 필요에 따라 선택적으로 사용할 수 있음, 프로그램 제어권이 개발자에게 있음

 

제어의 역전(IoC, Inversion of Control)

프로그램에 대한 제어의 흐름을 개발자가 아닌 프레임워크 또는 컨테이너가 담당하는 것.

발자가 객체를 생성하고, 의존 관계를 설정하는 것이 아니라, 프레임워크에게 제어의 권한을 넘기는 것을 의미한다.

객체를 생성하고 의존 관계를 명시하는 코드를 작성하면 프레임워크는 이를 기반으로 객체를 생성하고 의존성을 주입한다.

 

의존성 주입(DI, Dependency Injection)

정적인 의존관계: 애플리케이션 실행 없이 의존관계 분석 가능(클래스 다이어그램), 런타임 시 어떤 객체가 주입될지는 알 수 없음

동적인 의존관계: 실행 시점에 실제 생성된 인스턴스의 참조가 연결된 의존 관계(객체 다이어그램)

 

런타임 시 외부에서 실제 구현 객체를 생성하고, 클라이언트로 전달해서 실제 의존관계가 연결되는 것이 의존성 주입

클라이언트 코드 변경 없이 클라이언트가 호출하는 인스턴스를 변경할 수 있음.

정적 클래스 의존 관계 변경 없이 동적 의존관계를 변경할 수 있음

 

Application Context(스프링 컨테이너, IoC 컨테이너, DI 컨테이너)

애플리케이션의 실행 환경이나 설정 등을 포함한 개념으로 Spring Framework의 핵심 컨테이너이다.

애플리케이션 실행에 필요한 맥락, 환경 정보를 제공한다.

이를 통해 Spring Framework는 객체의 생성 및 관리를 적절하게 처리할 수 있다.

 

Application ContextXML, Java Configuration 클래스, Java 어노테이션 등을 사용하여 환경을 설정할 수 있다.

이러한 설정 정보를 바탕으로 Spring Context는 일종의 Bean Factory로 동작하게 되고

Spring Bean의 생명주기 관리, 의존성 주입, AOP 등과 같은 고급 기능들을 지원하여 애플리케이션의 모듈화 및 확장성을 향상시킨다.