개발 일지/Spring

[Spring] IoC / DI

미숫가루설탕많이 2023. 2. 2. 14:06

 IoC(Inversion of Control)란 직역하면 '제어의 역전', 애플리케이션 흐름의 주도권이 뒤바뀐 것을 말한다.

 

 라이브러리의 애플리케이션 흐름 주도권은 개발자에게 있고 프레임워크의 애플리케이션 흐름 주도권은 프레임워크에 있다. 이것을 IoC라고 부른다.

 

 이처럼 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라 부르며, 이렇게 IoC가 일어나는 공간을 IoC 컨테이너라고 부른다.

 

 IoC는 DI(Dependency Injection, 의존성 주입)와 밀접한 관련이 있다. IoC와 DI 모두 객체 간의 결합을 느슨하게 만들어 유연하고 확장성이 뛰어난 코드를 작성하기 때문이다.

 

 IoC는 서버 컨테이너 기술, 디자인 패턴, 객체 지향 설계 등에 적용하게 되는 일반적인 개념인데 반해서 DI는 IoC 개념을 조금 구체화시킨 것이라고 볼 수 있다.

 

 클래스 내부에서 다른 클래스의 객체를 생성하게 되면 두 클래스 간에 의존 관계가 성립하게 된다. 여기서 new를 사용해 참조할 클래스의 객체를 직접 생성하지 않고 생성자를 통해 외부에서 다른 클래스의 객체를 전달받는다면 의존성 주입이 이루어지고 있는 것이다.

 

 new 키워드를 사용해서 객체를 생성하면 클래스 간에 강하게 결합되어 있다고 하고 인터페이스와 같은 일반화된 구성 요소에 의존하고 있다면 느슨하게 결합되어 있다고 한다.

 

 객체들 간의 느슨한 결합은 요구 사항의 변경에 유연하게 대처할 수 있게 해준다.

'개발 일지 > Spring' 카테고리의 다른 글

[Spring] Spring Boot  (0) 2023.02.03
[Spring] PSA  (0) 2023.02.02
[Spring] AOP  (0) 2023.02.02
[Spring] POJO  (0) 2023.02.02
[Spring] 의존성 주입(Dependency Injection, DI)  (1) 2023.01.04