스프링

5. IoC, DI, 컨테이너

juhoyang 2024. 9. 22. 11:12

Ioc (Inversion of Control) 제어의 역전

기존은 클라이언트가 스스로 필요한 객체를 생성, 연결, 실행함 -> AppConfig에서 구현 객체를 관리해서

객체를 사용자가 직접 호출하는게 아니라 프레임 워크에서 호출, 관리 하도록함

프로그램의 제어 흐름을 클라이언트 소스에서 하는것이 아닌 외부인 프레임워크에서 관리히는 것

 

프레임워크 VS 라이브러리

프레임워크는 개발자가 작성한 코드를 제어, 실행시킴

라이브러리는 개발자가 작성한 코드가 직접 생성 실행시킴

DI(Dependency Injection) 의존관계 주입

스프링은 클라이언트 소스에서 추상화 인터페이스에만 의존하고 실제 구현객체는 AppConfig에서 담당한다.

애플리케이션 실행시점에 프레임워크에서 실제 구현객체를 생성하고 클라이언트에 전달애서 클라이언트와 서버의 실제 의존관계가 연결 되는 것

 

장점

클라이언트 코드를 변경하지 않고 호출하는 대상 인스턴스를 변경 가능하다.

정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 의존관계를 쉽게 변경 가능하다

 

정적인 클래스 의존관계

- 소스에서 파악할수 있는 의존관계 (클라이언트에서 어떤 추상화 인터페이스를 사용하는지 연결 등)

정적 클래스 의존관계예시

동적인 클래스 의존관계

실제 실행시점에서 생성된 객체 인스턴스의 참조가 연결된 의존관계 (스프링에서 AppConfig는 객체 연결을 동적으로 변경 가능하다.)

Ioc컨테이너, DI 컨테이너

- 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것

 


자료출처

스프링 핵심 원리 - 기본편

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard