제어의 역전 Ioc (Inversion of Control)
제어의 역전 미사용
- 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고 실행을 했다. 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다 - 개발자 입장에서는 자연스러운 흐름 그러나 이렇게 코딩할 경우 DIP, OCP 규칙에 어긋난다.
제어의 역전 사용
- 각 구현 객체는 자신의 로직만 실행하고, 프로그램의 제어 흐름은 AppConfig가 통제한다. 이처럼 프로그램의 제어 흐름을 외부에서 관리하는 것을 제어의 역전( IoC ) 라고 부른다.
의존관계 주입 DI ( Dependency injection )
정적인 의존관계
- 클래스의 import 코드로 의존관계를 파악할 수 있는데 이를 정적인 의존관계라 한다. DI 프로그래밍에서는 정적인 의존관계로 어떤 객체가 주입될지는 알 수 없다. 왜냐하면 프로그램의 제어를 AppConfig가 다루고 있기 때문이다.
동적인 의존 관계
- 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
- 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달하여 클라이언트와 서버의 실제 의존관계가 연결되는 것 ( 의존관계 주입 )
- 클라이언트의 코드는 변경되지 않고, 호출하는 대상 타입의 인스턴스를 변경할 수 있다. ( 핵심 )
- 마찬가지로 의존관계 주입을 사용하면 정적인 클래스의 의존관계에 영향을 주지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다. (OCP, DIP)
IOC 컨테이너 < DI 컨테이너 (최근 트렌드)
- AppConfig 처럼 외부에서 객체를 생성하고 관리하면서 의존관계를 연결해주는 것을 DI 컨테이너라 부르고 의존관계 주입이라고 한다.
- IOC 컨테이너, DI 컨테이너, 어샘블러, 오브젝트 팩토리 등 같은 의미의 용어들이 있는데, 최근 가장 많이 사용하는 용어는 DI 컨테이너 다.
'IT 정보 > Spring' 카테고리의 다른 글
[Spring] 스프링 컨테이너 (12) | 2022.06.16 |
---|---|
[Spring] FrameWork (36) | 2022.06.15 |
[Spring] 스프링의 역사 이야기 (36) | 2022.06.02 |
[Spring] SOLID (객체 지향 설계의 5가지 원칙) (7) | 2022.06.02 |
[Spring] 관심사의 분리 -MVC 패턴 (7) | 2022.05.12 |