항해 3주차 WIL

백승한·2022년 7월 10일
0

스프링과 객체 지향

  • 다형성이 가장 중요하다!
  • 스프링은 다형성을 극대화해서 이용할 수 있게 도와준다.
  • 스프링에서 이야기하는 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
  • 스프링을 사용하면 마치 레고 블럭 조립하듯이! 공연 무대의 배우를 선택하듯이! 구현을 편리하게 변경할 수 있다.

DI (Dependency Injection)

  • 마치 외부에서 주입해주는 것 같다고 해서
    DI(Dependency Injection) 우리말로 의존관계 주입 또는 의존성 주입이라 한다.

  • 의존성 주입을 통해서 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중하면 된다.

  • 의존관계는 정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계 둘을 분리해서 생각해야 한다.

  • 프로그래머는 “추상화에 의존해야지, 구체화에 - 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

의존관계 주입은 크게 4가지 방법이 있다.
- 생성자 주입
// 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.
// 불변, 필수 의존관계에 사용

- 수정자 주입(setter 주입)
// 선택, 변경 가능성이 있는 의존관계에 사용

- 필드 주입
// 코드가 간결해서 많은 개발자들을 유혹하지만 외부에서 변경이 불가능해서 테스트 하기 힘들다는 치명적인 단점이 있다.
// DI 프레임워크가 없으면 아무것도 할 수 없다.
// 스프링 설정을 목적으로 하는 @Configuration 같은 곳에서만 특별한 용도로 사용

- 일반 메서드 주입
// 한번에 여러 필드를 주입 받을 수 있다.
// 일반적으로 잘 사용하지 않는다

IoC란?

  • 제어의 역전 IoC(Inversion of Control)
  • 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다.
  • 스프링 애플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 스프링 컨테이너가 담당한다.
  • 이를 스프링 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.
  • 따라서, 스프링 컨테이너를 IoC 컨테이너라고도 부른다.

IoC 컨테이너란?

  • 스프링에서는 IoC를 담당하는 컨테이너를 빈 팩토리, DI 컨테이너, 애플리케이션 컨텍스트라고 부른다.
  • 오브젝트의 생성과 오브젝트 사이의 런타임 관계를 설정하는 DI 관점으로 보면, 컨테이너를 빈 팩토리 또는 DI 컨테이너라고 부른다.
  • 그러나 스프링 컨테이너는 단순한 DI 작업보다 더 많은 일을 하는데, DI를 위한 빈 팩토리에 여러 가지 기능을 추가한 것을 애플리케이션 컨텍스트라고 한다.
  • 정리하자면, 애플리케이션 컨텍스트는 그 자체로 IoC와 DI 그 이상의 기능을 가졌다고 보면 된다.

Bean

  • @Bean - 스프링 컨테이너에 스프링 빈으로 등록
    - 스프링 컨테이너는 @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용한다. 여기서 @Bean 어노테이션이 있는 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
    - 스프링 빈은 @Bean 이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다.
profile
방문해주셔서 감사합니다🙂

0개의 댓글