[Spring] IoC (DI, Container, Bean)

정연희·2024년 5월 29일
0

Spring

목록 보기
2/2

IoC(Inversion of Control)는 제어의 역전이라는 소프트웨어 공학의 기본 원칙이다. 전통적인 프로그래밍에서는 제어 흐름이 응용 프로그램 코드에 의해 결정된다. 반면에 IoC에서는 실행 흐름 제어가 뒤바뀌어, 외부 개체가 객체와 그 수명주기를 관리한다. Spring 프레임워크의 맥락에서 IoC는 객체의 생성과 관리를 응용 프로그램 코드 내에서 직접 관리하는 대신에 컨테이너나 프레임워크와 같은 외부 소스에 위임하는 기술이다. 스프링 IoC는 다음과 같은 개념을 내포하고 있다.

1. 의존성 주입(DI, Dependency Injection)

IoC의 핵심 개념 중 하나는 의존성 주입이다. 클래스가 자체적으로 의존성을 생성하는 대신, 이러한 의존성이 외부 소스에서 클래스로 "주입"된다. 이를 통해 클래스 간의 결합이 느슨해지며, 의존성을 쉽게 모의(Mock)하거나 교체할 수 있습니다.

2. 컨테이너 (Container)

Spring에서 IoC 컨테이너는 객체의 생성 및 생명주기에 대한 모든 것을 책임지고, 의존성을 관리한다. 이를 위해 XML 구성, Java 어노테이션 또는 Java 기반 구성과 같은 구성 메타데이터를 사용하여 객체가 어떻게 생성되고 함께 연결될지 정의한다. 즉, 컨테이너는 설정 메타데이터를 분석하고, 객체의 인스턴스를 생성하고, 의존성을 해결하여 객체를 조립한다. 그리고 이러한 객체들은 필요한 곳에서 사용될 수 있도록 한다. 스프링 IoC 프레임워크에는 두 가지의 핵심적인 클래스가 있는데, 바로 BeanFactory.classApplicationContext.class이다.

3. 빈(Bean)

스프링에서 IoC 컨테이너에 의해 관리되는 객체를 빈이라고 한다. 이러한 빈은 구성 메타데이터에 따라 스프링 IoC 컨테이너에 의해 인스턴스화, 구성 및 조립된다.


Spring IoC 장점

이러한 Spring IoC가 있는 이유는 여러 가지 장점을 가지고 있기 때문이다.

  • 객체 간의 결합도 감소

  • 코드의 유연성 및 확장성

  • 테스트 용이성

IoC를 사용하면, 각 객체는 그들의 의존성을 외부에서 주입받게 되므로, 객체 간의 느슨한 연결이 가능해진다.
그리고 코드의 유연성 및 확장성도 좋아진다. 의존성 주입을 통해 개발자는 기존 코드를 변경하지 않고도 새로운 기능을 추가하거나 기존 기능을 변경할 수 있다. 마지막으로 실제 객체 대신 목업 객체를 주입하여
단위 테스트를 쉽게 수행할 수 있다 (.

profile
추가 블로그: https://prickle-justice-361.notion.site/720540875b754767a73f52c038056990?v=11366b23c086803f889b000c2562fa51&pvs=4

0개의 댓글