본문 바로가기

OOP

IoC와 DI

반응형

IoC (Inversion of Control)

제어의 역전이라는 의미로, 메서드나 객체의 호출이 개발자가 아닌 외부에서 결정되는 것을 의미한다.

여기서 매개체는 IoC 컨테이너이다.

IoC 장점

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있도록 한다.

따라서 가독성이 높고, 코드 중복은 적으며 유지보수 시 편리하다.

 

IoC 컨테이너

객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공한다.

예로는 Spring 프레임워크의 Spring 컨테이너가 있다.

 

기존에는 다음과 같이 객체가 생성되고 실행되었다.

1. 객체 생성

2. 의존성 객체 생성 (클래스 내부에서 new 연산자를 통해 생성) 

3. 의존성 객체 메서드 호출

 

Spring의 경우 다음과 같다.

1. 객체 생성

2. 의존성 객체 주입 (제어권을 Spring에게 위임하여 Spring이 만들어 놓은 객체 주입)

3. 의존성 객체 메서드 호출

 

따라서 제어의 흐름을 사용자가 컨트롤하는 것이 아닌 Spring이 처리한다.

 

IoC 분류

IoC는 DL과 DI로 구성된다.

 

DL (Dependency Lookup)

의존성 검색으로, Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup하는 것이다.

아래와 같이 Bean에 대한 정보가 있는 xml 파일이 있을 때, Java 에서는 해당 xml의 Bean 정보를 보고 검색을 통해 어떤 클래스를 사용할 지 주입하게 된다.

<beans>
	<bean id="myObject" class="com.Jain.MyObject" />
</beans>

 

DI (Dependency Injection)

의존성 주입으로, 객체 간 의존성을 개발자가 객체 내부에서 직접 호출(new)하는 대신, 외부에서 객체를 생성해서 넣어주는 방식이다.

 

 

 

reference

- https://devmoony.tistory.com/100

- https://www.youtube.com/watch?v=1vdeIL2iCcM 

반응형

'OOP' 카테고리의 다른 글

DI 방법과 장단점  (0) 2023.03.27
OOP 란?  (0) 2021.08.31