Spring - IoC

code_able·2023년 10월 31일
0
post-custom-banner

Spring의 IoC (Inversion of Control)

의존성 주입(Dependency Injection)을 포함하는 디자인 패턴 중 하나입니다.

일반적으로 객체 간의 의존성을 해결하는 방법 중 하나는 객체가 직접 필요한 객체를 생성하거나 관리하는 것입니다. 그러나 Spring IoC 컨테이너를 사용하면 이러한 객체 생성 및 관리를 Spring 프레임워크가 대신 수행합니다.

다시 말해, 개발자가 객체의 생명주기를 직접 관리하는 것이 아니라, Spring 컨테이너가 객체의 생성, 초기화, 소멸 등을 관리합니다. 이를 통해 코드의 결합도를 낮추고 객체 간의 의존성을 느슨하게 만듭니다.

Spring IoC의 주요 특징

의존성 주입 (Dependency Injection): 객체가 직접 필요한 의존성을 생성하거나 관리하는 것이 아니라 외부에서 의존성을 주입받는 방식입니다.

Bean 관리: Spring 컨테이너는 개발자가 정의한 Bean들의 생명주기를 관리하고, 필요한 시점에 Bean을 생성하고 제거합니다.

컴포넌트 스캔 (Component Scanning): Spring은 자동으로 어플리케이션에서 사용될 Bean을 찾아 등록해주는 컴포넌트 스캔 기능을 제공합니다.

Bean의 스코프 관리: Singleton, Prototype, Request, Session 등의 다양한 스코프를 지원합니다.

AOP (Aspect-Oriented Programming) 지원: 관점 지향 프로그래밍을 통해 코드의 횡단 관심사(Cross-cutting Concerns)를 분리하여 관리할 수 있습니다.

Spring IoC 컨테이너는 두 가지 주요 유형이 있습니다:

BeanFactory: 가장 기본적인 IoC 컨테이너로, Bean을 등록하고 관리하는 기본적인 기능을 제공합니다.

ApplicationContext: BeanFactory를 확장한 인터페이스로, 더 많은 기능을 제공하며, 메시지 처리, 이벤트 발행, 국제화 등의 기능을 포함합니다.

Spring IoC는 애플리케이션을 모듈화하고 유지보수하기 쉽게 만들어주며, 테스트와 확장이 용이하도록 도와줍니다.

작동 순서

Bean 정의 (Bean Configuration): IoC 컨테이너에게 어떤 객체(Bean)를 생성하고 관리할 것인지를 정의합니다. 이 정보는 주로 XML, Java Config, Annotation 등의 방법으로 제공됩니다.

IoC 컨테이너 초기화: Bean 정의가 제공되면, IoC 컨테이너는 애플리케이션의 시작 시점에 초기화됩니다. 이 단계에서 컨테이너는 Bean 정의를 파싱하고 필요한 객체들을 생성합니다.

Bean 생성: 컨테이너는 Bean 정의에 따라 필요한 Bean들을 생성합니다. 이때 객체의 생명주기를 결정하고 초기화 메소드를 호출합니다.

의존성 주입 (Dependency Injection): Bean들 간의 의존성이 설정되어야 할 경우, IoC 컨테이너는 설정된 의존성을 주입합니다. 이 과정에서 setter 주입, 생성자 주입 등의 방법을 사용합니다.

Bean 사용: 이제 애플리케이션에서 필요한 Bean들을 사용할 수 있습니다.

Bean 소멸 (만약 스코프가 singleton이 아니라면): Bean의 스코프가 singleton이 아닌 경우, 해당 Bean이 더 이상 필요하지 않으면 컨테이너는 Bean을 소멸시킵니다.

애플리케이션 종료 시 Bean 소멸 (만약 스코프가 singleton인 경우): 애플리케이션이 종료될 때, 컨테이너는 singleton Bean들을 소멸시킵니다.

이러한 순서로 IoC 컨테이너는 애플리케이션의 객체를 생성하고 관리하며, 필요한 곳에 의존성을 주입하여 개발자가 객체 간의 결합을 최소화하도록 도와줍니다.

profile
할수 있다! code able
post-custom-banner

0개의 댓글