개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편

[섹션 4. 스프링 컨테이너와 스프링 빈] 스프링 컨테이너 생성 / 인프런 김영한 스프링 핵심 원리 기본편

easpop 2023. 3. 16. 22:20
728x90
반응형

이번 시간에는 스프링 컨테이너와 스프링 빈에 대하여 알아보는 시간을 가졌다.

 

스프링 컨테이너가 어떻게 생성되는지 과정을 알아보자.

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

위의 코드로 컨테이너가 생성된다.

new 연산자로 객체를 생성하면서 AppConfig.class 정보를 주면서 파라미터로 넘긴다.

ApplicationContext를 스프링 컨테이너라고 하고, ApplicationContext는 인터페이스이다.

이는 이름 그대로, Annotation 기반의 자바 Config(설정) 클래스로 스프링을 만들어라~~ 를 뜻한다.

스프링 컨테이너는 역시 말 그대로, 컨테이너 안에 사용하는 객체를 담는것을 말한다!

 

스프링 컨테이너의 생성 순서를 보자면,

new AnnotationConfigApplicationContext(AppConfig.class)를 통해서 스프링 컨테이너가 생성이 된다.

생성이 되면, 스프링 컨테이너 안에는 스프링 빈 저장소가 있다.

스프링 빈 저장소는 key값으로 빈 이름, value값은 빈 객체가 된다.

 

스프링 컨테이너를 생성할 때는 구성 설정 정보를 지정해주어야 하는데, 그게 파라미터로 넘긴 AppConfig.class이다.

그러면 스프링 컨테이너가 AppConfig.class 정보를 보고, 객체 생성을 해야 되겠구나~~ 인지를 한다.

그리고는, 스프링 컨테이너 안에 있는 스프링 빈 저장소에 스프링 빈을 등록을 한다.

그리고 나서 AppConfig에 @Bean 어노테이션이 되어있는 메소드들을 호출을 해서 빈 객체로 등록한다.

 

예를 들어, AppConfig 클래스에서 MemberService를 보자.

스프링 빈 저장소에 key값인 빈 이름값으로 MemberService를 등록한다.

그리고 return하는 new 객체를 빈 객체로 등록을 해준다.

마찬가지로 나머지 모든 메소드들을 같은 방식으로 등록을 해준다.

 

여기서 주의할 점은 빈 이름은 항상 다른 이름을 부여해야 한다.

같은 이름을 부여하게 되면 오류가 발생하기도 하기 때문에 주의해야 한다.

그렇기 때문에, 실무에서는 명확한 개발이 좋기 때문에 같은 빈 이름을 부여하지 않도록 주의하자.

반응형

그 다음 단계로, 스프링 컨테이너는 설정 정보를 참고해서, 생성한 객체들의 의존관계를 주입해준다.

위의 그림의 예시에서, memberSerivce는 memberRepository에 의존관계를 넣어주면,

MemoryMemberRepository가 세팅이 된다.

orderService는 memberRepository와 discountPolicy를 의존하기 때문에 둘다 의존관계를 주입해준다.

이렇게 동적인 객체 인스턴스 의존관계를 스프링이 다 연결을 해주기 때문에, 객체의 참조값들이 다 연결되게 된다.

 

스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다.

먼저 빈 객체를 생성하고, 다 생성이 되면, 그 다음에 의존관계를 엮어준다.

하지만 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리가 된다.

이 부분에 대해서는 나중 강의에서 다룰 예정!

728x90
반응형