IoC/DI - 제어의 역전/의존성 주입
Spring
·
IoC - 제어의 역전
- 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미
- 객체에 대한 제어권이 개발자로부터 컨테이너로 넘어간 것
- 객체의 생성부터 생명주기 관리까지 전부 컨테이너가 맡아서 함 (컨테이너의 역할)
- 스프링에서 제공하는 컨테이너를 IoC 컨테이너라고도 함
- 대부분의 프레임워크에서 사용하는 방법
- 개발자는 프레임워크에 필요한 부품을 개발하고, 조립하는 방식의 개발을 하게됨
- 이렇게 조립된 코드의 최종 호출은 개발자에 의해서 제어되는 것이 아니라, 프레임워크의 내부에서 결정된 대로 이뤄지게 되는데, 이러한 현상을 제어의 역전 이라고 표현
- 스프링은 그 자체가 구조를 설계할 수 있도록 만들어졌단 의미
- 대부분 프레임워크에서 IoC를 적용하기때문에 이것으로 스프링을 정의할 수 없음
스프링이 다른 프레임워크와 차별화돼서 제공해주는 기능은 의존관계 주입이라는 새로운 용어를 사용할 때 잘 들어남
DI - 의존성 주입
- 각 객체들 사이의 필요로 하는 의존 관계를 컨테이너가 자동으로 연결해주는 것
- 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결
- 애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존 관계가 연결되는 것
의존성 주입을 왜 하는데?
- SRP 단일 책임 원칙
- 구현 객체를 생성하고 연결하는 책임 컨테이너에게 위임하고, 클라이언트 객체는 실행하는 책임만 담당하게 할 수 있다.
- DIP 의존관계 역전 원칙
- 의존관계를 클라이언트 코드에서 직접 주입하면 사실상 구체 클래스에 의존하게 된다.
- 의존성 주입을 컨테이너가 대신 해주게 되면, 클라이언트 코드는 인터페이스에만 의존할 수 있다.
- OCP 개방 패쇄 원칙
- 의존 관계를 변경하게 된다면? 클라이언트 코드의 변경없이 설정 정보의 의존 관계 부분만 수정하면 된다.
레퍼런스
스프링 핵심 원리 - 기본편 by 김영한
https://jobc.tistory.com/30