제어의 역전 (IOC)

잼구·2023년 10월 17일
1
post-thumbnail

제어의 역전 (IOC)

보통은 사용하는 쪽에서 무엇을 사용할지 결정, 생성 까지 다 한다.
하지만 제어의 역전 상황에서는 사용하는 쪽에서 둘 다 안함. 사용하는 쪽은 자신이 사용할 객체를 주입을 받게 된다.
이러한 제어의 권한이 객체 자신에게 없고 다른 곳 (예. 프레임워크)에 있는 것이다.
프레임 워크는 단순한 반제품이 아닌, 전체 흐름의 제어의 권한을 가지게 된다.

프레임 워크 vs 라이브러리

이러한 관점에서

  • 프레임 워크 : 개발자가 짠 어플리케이션 코드가 프레임워크에 의해 사용된다. 프레임 워크가 흐름을 주도한다.
  • 라이브러리 : 라이브러리를 쓰는 애플리케이션 코드는 흐름을 직접 제어.

이 둘은 이런 차이가 있다.

Ioc 를 가능하게 하는 공간

Ioc container : 객체들의 의존관계 설정이 이루어지게 되고 객체의 생성, 파괴가 모두 이루어진다. ~context 라고도 부른다.

spring 의 경우

Spring 의 AplicationContext 는 configuration-Metadata 를 기반으로 만들어진다. AplicationContext 를 도면이라고 생각하면 편할듯.

AplicationContext 는 자바 or xml 기반 구현체가 있다.

정리
configuration : 빈 정보 등록
AplicationContext : 빈 생성, 파기, 가져오기 기타 등등

해당 방식으로 컨텍스트를 만들 수 있다.

var applicationContext 
	= new AnnotationConfigApplicationContext(AppConfiguration.class)

Ioc 구현 방법

DI 는 Ioc 구현 방법 중 하나일 뿐이다. DI 없이도, 전략패턴, 팩토리패턴 등등으로 Ioc 를 구현 할 수 있다. 생성자 주입 패턴 (DI) 만이 Ioc 를 구현 할 수 있는 방법이 아님을 알자.

반대로 Ioc 가 없는 DI 도 있을 수 있다.
DI는 IoC를 사용하지 않아도 된다

spring 의 경우

스프링은 Ioc 를 DI 로 구현한다.
각 빈의 종속성은 속성, 생성자 인수 또는 정적 팩토리 메서드에 대한 인수의 형태로 표현 된다(일반 생성자 대신 정적 팩토리 메서드를 사용하는 경우). 이러한 종속성은 빈이 실제로 생성될 때 빈에 제공 된다. 또한 속성이나 생성자 인자는 실제 값이 주입될 수도 있고, 다른 빈을 참조하여 주입될 수도 있다.

profile
잼구입니다

0개의 댓글