[Spring] Spring의 IoC

Zoe·2022년 1월 5일
0

Spring

목록 보기
2/9
post-thumbnail

Spring의 IoC


🌟 스프링의 핵심을 담당하는 건 ApplicationContext(Bean Factory)
🌟 IoC = Inversion of Control(제어의 역전)

✅ 오브젝트 팩토리를 이용한 스프링 IoC

1️⃣ 애플리케이션 컨텍스트와 설정정보

  • Bean : 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
  • Bean Factory : 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트
  • Application Context : 빈 팩토리를 확장한 IoC 엔진, IoC의 방식을 따라 만들어진 일종의 빈 팩토리
  • Application Context는 별도로 설정정보를 담고 있는 무언가를 가져와 활용하는 IoC엔진
  • 설정정보를 만드는 방법은 여러가지

2️⃣ DaoFactory를 사용하는 애플리케이션 컨텍스트

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 스프링이 빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식할 수 있게 해주는 어노테이션
@Configuration 
public class DaoFactory {

	// 오브젝트 생성을 담당하는 IoC용 메서드라는 표시
	// 메서드 이름은 Bean의 이름이 된다.
	@Bean
	public UserDao userDao() {
 		return new UserDao(connectionMaker());
	}
	@Bean
	public ConnectionMaker connectionMaker() {
  		return new DConnectionMaker();
	}
}
public class UserDaoTest {
	@Test
	public UserDaoTest() {
  		ApplicationContext context
    			= new 	AnnotationConfigApplicationContext(DaoFactory.class);
  		UserDao userDao = context.getBean("userDao", UserDao.class);//userDa
o는 ApplicationContext에 등록된 빈의 이름이 됨
	}
}
  • DaoFactory를 빈 팩토리가 사용할 수 있는 본격적인 설정정보로 만들기
  • 그 설정정보를 사용하는 애플리케이션 컨텍스트를 선언하기

✅ 애플리케이션 컨텍스트의 동작방식

➡️ 애플리케이션 컨텍스트가 동작하는 방식

1️⃣ 애플리케이션 컨텍스트가 정확히 무엇일까

  • 오브젝트 팩토리에 대응되는 것이 스프링의 애플리케이션 컨텍스트
    ➡️ 애플리케이션 컨텍스트는 ApplicationContext 인터페이스를 구현
    ➡️ ApplicationContext는 BeanFactory를 상속받음
    ➡️ 따라서 애플리케이션 컨텍스트는 빈 팩토리인 것
  • 애플리케이션에서 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계설정을 담당
  • 직접 객체 생성하는 것이 아니라 생성정보와 연관관계 정보를 별도의 설정정보를 통해 얻음
  • 때로는 외부 오브젝트 팩토리에 그 작업을 위임하고 그 결과를 가져다가 사용함

2️⃣ 애플리케이션 컨텍스트의 장점

  • 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없음
  • 애플리케이션 컨텍스트는 종합 IoC 서비스를 제공
    ➡️ 다양한 제어 기능 제공 : 오브젝트 생성 방식-시점-전략 각각 다르게 결정, 자동생성, 오브젝트에 대한 후처리, 정보의 조합, 설정 방식의 다변화 등
  • 애플리케이션 컨텍스트는 빈을 검색하는 다양한 방법을 제공
    ➡️ 이름으로 검색, 타입으로 검색, 애노테이션으로 검색

✅ 스프링 IoC 용어 정리

1️⃣ 빈(bean)

  • 스프링이 IoC 방식으로 생성과 제어를 담당하여 관리하는 오브젝트

2️⃣ 빈 팩토리(bean factory)

  • 스프링의 IoC를 담당하는 핵심 컨테이너
  • 빈을 등록, 생성, 조회, 반환, 관리
  • 보통은 빈 팩토리를 확장한 애플리케이션 컨텍스트를 이용

3️⃣ 애플리케이션 컨텍스트(Application Context)

  • 빈 팩토리를 확장한 IoC 컨테이너
  • 빈을 등록, 관리하는 기본적인 기능은 빈 팩토리와 동일
  • 스프링이 제공하는 각종 부가 서비스를 추가로 제공

4️⃣ 설정정보/설정 메타정보(configuration metadata)

  • 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보
  • IoC 컨테이너에 의해 관리되는 애플리케이션 오브젝트를 생성, 구성하는데 사용됨

5️⃣ 컨테이너(container) 또는 IoC 컨테이너

  • IoC 방식으로 빈을 관리한다는 의미로 애플리케이션 컨텍스트나 빈 팩토리를 지칭하는 말
  • 컨테이너라는 말 자체가 IoC의 개념을 담고 있기 때문에 이름이 긴 애플리케이션 컨텍스트 대신 스프링 컨테이너 라고 지칭함
  • '스프링에 빈을 등록'라는 식으로 말할 때 스프링 = 컨테이너 = 애플리케이션 컨텍스트

6️⃣ 스프링 프레임워크

  • 스프링이 제공하는 모든 기능을 통틀어 말함
profile
iOS 개발자😺

0개의 댓글