녕의 학습 기록

[Spring 기본] 객체d 지향 원리 적용 (4) 본문

Dev/Spring

[Spring 기본] 객체d 지향 원리 적용 (4)

kjyyjk 2022. 11. 1. 23:21

 학습 내용 

 

IoC / DI / 컨테이너 / 스프링으로의 전환


* 제어의 역전 IoC ( Inversion of Control )

 

기존에는 클라이언트가 스스로 필요한 구현객체를 생성하고 연결하고 실행.

 

즉, 구현 객체가 프로그램 제어 흐름을 조종

 

이제는 AppConfig가 등장하면서 제어의 흐름을 가져갔다. 클라이언트 객체는 열심히 실행만 할 뿐이다.

 

이처럼 제어 흐름을 직접 제어하는 것이 아닌, 외부에서 관리하는 것을 제어의 역전.

IoC라고 한다

 

* 의존관계 주입 DI ( Dependency Injection )

 

- 정적인 클래스 의존 관계

  클래스가 사용하는 코드만 보고도 의존관계를 쉽게 파악 가능

  실행 없이 분석 가능.

  단, 실제 어떤 구현 객체가 주입될 지는 알 수 없다

 

- 동적인 객체 의존 관계

  실행 시점에 생성된 객체 인스턴스의 참조가 연결된 의존관계.

 

 

실행 시점에 클라이언트와 서버의 실제 의존관계가 연결

→ 의존관계 주입

 

의존관계 주입을 이용하면 정적 클래스 의존관계 변경 없이 동적 객체 의존관계 변경 가능.

 

* 컨테이너

 

컨테이너는 객체를 생성하고 관리하며 의존관계를 연결해준다

ex) AppConfig가 의존관계를 집어 넣어준다 → DI 컨테이너 (또는 IoC 컨테이너)

 

 

* 스프링으로 전환

 

여태까지 모든 개발을 순수한 자바 코드로 진행했지만 여기서부터 스프링을 사용했다.

 

AppConfig 스프링으로 전환

@Configuration 을 붙여주면 설정을 구성한다는 것

 

@Bean 을 각 메서드에 붙여주어 스프링 컨테이너에 스프링 빈으로 등록..!

 

애플리케이션 실행 도 맞추어 변경해주었다.

ApplicationContext 가 바로 스프링 컨테이너라고 보면 된다.  모든 시작은 여기서부터.

 

applicationContext가 모든 것을 관리한다

 

AppConfig에 있는 설정 정보를 스프링이 스프링 컨테이너에 객체 생성하여 집어넣고 관리

 

.getBean을 통해 스프링 컨테이너에서 객체를 찾아온다

 

* 정리

 

@Configuration 이 붙은 AppConfig를 설정 정보로 사용

 

@Bean붙은 메서드 모두 호출 한 후에 반환 된 객체를 스프링 컨테이너에 등록

 

이때 등록된 객체를 스프링 빈

 

스프링 빈의 이름 == @Bean 메서드의 이름

 

applicationContext.getBean()을 이용해 스프링 빈을 찾을 수 있다.

 

 


 다음 학습 내용 

 

AppConfig 보다도 스프링 컨테이너를 사용하는 이유

 

스프링 빈과 스프링 컨테이너에 대하여

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com