IOC(Inversion of Control)란?
직역하면 "제어의 역전"이라는 의미
메소드나 객체의 호출을 개발자가 아닌 외부에서 결정되는 것을 의미한다.
객체간의 결합도를 줄여 유연한 코드를 작성할 수 있다.
IOC의 컨테이너
객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다.
기존방식
1.객체 생성
2.의존성 객체 생성 - 클래스 내부에서 생성
3.의존성 객체 메소드 호출
SPRING
1.객체 생성
2.의존성 객체 주입 - 객체를 스스로 만드는 것이 아닌, 제어권을 스프링에게 위임하여 스프링에서 객체를 주입
3.의존성 객체 메소드 호출
스프링은 모든 의존성 객체를 스프링 컨테이너를 실행될 때 생성하며 의존성을 주입시켜준다.
Bean들은 싱글톤 패턴의 특징을 가져 제어의 흐름이 사용자가 아닌 스프링이 처리한다.
DL(Dependency Lookup)
의존성 검색으로 Bean에 접근하기 위해 컨테이너나 제공하는 API를 이용하여 Bean을 Lookup하는 것이다.
아래와 같이 Bean에 대한 정보가 있다.
<bean id="helloService" class="kr.co.acomp.hello.service.HelloService">
<!-- 생성자 주입 방법
<constructor-arg ref="helloDAO" />
-->
<property name="helloDAO" ref="helloDAO"></property>
<property name="anotherDAO" ref="anotherDAO"></property>
</bean>
Java에서는 해당 XML의 Bean 정보를 검색하여 어떤 클래스를 사용할지 정한다.
AbstractApplicationContext ctx =
new ClassPathXmlApplicationContext("/spring-context.xml"); // 스프링 컨테이너 로딩 시킨다. 이때 spring-context.xml의 빈을 생성한다.
HelloService service = ctx.getBean("helloService", HelloService.class); // 이전에 생선된 빈을 getBeen을 찾아와서 객체로 사용한다.
int test = service.calcTwoNumbers(4, 8);
DI(Dependency Injection)
의존성 주입으로 각 클래스 간의 의존성을 개발자가 아닌 외부(컨테이너)에서 주입하는것
[Spring] Ioc 컨테이너 - DL(Dependency Lookup) 과 DI(Dependency Injection)
IoC 그리고 DL 과 DI IoC의 이해 IoC(Inversion of Control) 이란? "제어의 역전" 이라는 의미로, 메서드나 객체의 호출을 개발자가 결정하는 것이 아닌, 외부에서 결정되는 것을 의미한다. 간단히 말해 "제
devmoony.tistory.com
'WEB > Spring' 카테고리의 다른 글
Spring Boot AOP 적용 방법(Log, Transaction) (4) | 2024.09.03 |
---|---|
Spring Boot로 MSA 개발하기 (5) | 2024.08.30 |
스프링에서 Service ServiceImpl 사용하는 이유 (0) | 2024.03.23 |
스프링 전역 예외처리 (0) | 2024.03.23 |
자바)Reflection 사용한 동적 메소드 호출 (0) | 2024.03.23 |