[강의] 스프링 핵심 원리 - 기본편3

이나형·2024년 8월 20일
0

Spring 강의(김영한)

목록 보기
3/3
post-thumbnail

이 포스팅은 인프런 강의 중 김영한님의 '스프링 핵심 원리 - 기본편' 중
섹션 4의 내용 일부를 정리한 것입니다.
코드 및 사진 이미지 모두 해당 강의를 참고하였습니다.

스프링 핵심 원리 - 기본편 링크



✅스프링 컨테이너 정리


//스프링 컨테이너 생성
ApplicationContext applicationContext = 
					new AnnotationConfigApplicationContext(AppConfig.class);

  • ApplicationContext는 스프링 컨테이너라 한다.
    (정확히는 BeanFactory와 ApplicationContext로 구분짓지만 BeanFactory를 직접 사용하는 경우가 거의 없어서 일반적으로 ApplicationContext를 스프링 컨테이너라 한다.)

  • 스프링 컨테이너는 XML 기반으로 만들 수 있고, 에노테이션 기반의 자바 설정 클래스로 만들 수 있지만 전 포스팅에서 작성한 것처럼
    AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.



✅스프링 컨테이너의 생성 과정

1. 스프링 컨테이너 생성

출처: (인프런) '김영한'
스프링 핵심 원리 - 기본편

여기서 키는 빈의 이름이 되고, 값은 빈의 객체가 된다.
이러한 내부의 빈 저장소가 있다.
따라서 스프링 컨테이너를 생성할 때에는 구성 정보를 지정해주어야 한다.
이 구성 정보는 AppConfig를 뜻한다.


2. 스프링 빈 등록

출처: (인프런) '김영한'
스프링 핵심 원리 - 기본편

스프링 컨테이너가 빈 저장소에 AppConfig 설정 정보를 넘긴 것을 보고
@Bean이 붙은 것을 호출해서 메서드 네임을 키로 가지고
new로 반환하는 객체를 빈 객체로 등록하여 스프링 빈에 등록한다.

📂빈 이름

  • 기본적으로 메서드 이름으로 저장된다.
  • @Bean(name= "memberService2")처럼 직접 등록할 수 있다.
  • 항상 다른 이름을 부여해야 한다. 같은 이름일 경우 무시되거나 기존 빈이 덮이는 문제가 생길 수 있다.(이 경우 오류가 생길 수 있음)

스프링 빈 의존관계 설정

스프링 컨테이너는 설정 정보를 참고하여 동적인 의존관계를 주입(DI)한다.

↗️정적 vs 동적 의존관계란?


정적인 의존관계는 코드상에서 클래스 간의 의존관계를 나타내는 것으로, 직접 코드에서 의존하는 클래스를 호출하는 방식입니다. 여기에서는 OrderServiceImpl 클래스가 MemberRepository와 DiscountPolicy 인터페이스에 의존하는 것을 확인할 수 있습니다.


동적인 의존관계는 스프링 컨테이너에서 의존하는 객체를 주입받는 방식입니다. 스프링 컨테이너는 객체 생성과 의존성 주입을 담당하며, 주입 받을 객체의 타입을 스프링 컨테이너에 알려주면 컨테이너가 해당 타입의 객체를 생성하여 주입해줍니다.
출처: (인프런)스프링 핵심 원리 - 기본편 Q&A

profile
정도를 걷는 개발자

0개의 댓글