Spring Triangle 요약 (1) - IoC

Tina Jeong·2020년 8월 5일
0

Spring Triangle

목록 보기
1/1

IoC란?

Inversion of Control의 준말로, 제어권의 역전이라고도 한다.

일반적으로는

객체 내부에서 필요한 기능이 있는 클래스를 생성해서 사용한다. 즉, 제어권이 외부 기능을 사용할 객체에게 있다.

public class Owner {
    private VisitRepository visitRepository;
    
    //제어권이 Owner에게 있음
    Owner() {
        visitRepository = new VisitRepository();
    }
}

반면, 스프링에서는

필요한 기능이 있는 객체를 관리하는 컨테이너를 따로 만들고, 해당 컨테이너로부터 객체에게 필요한 기능이 있는 객체를 주입시킨다. 달리 말해, IoC Container는 의존성 주입Dependency Injection을 수행한다.

@Controller
class OwnerController {
    private final OwnerRepository owners;
    private final VisitRepository visits;
    //생성자를 통해 IoC Container가 의존성을 주입해줌
    public OwnerController(OwnerRepository clinicService, 
    VisitRepository visits) {
        this.owners = clinicService;
        this.visits = visits;
    }
}

Bean이란?

스프링을 공부하면서 가장 많이 듣게 되는 키워드 중 하나가 바로 Bean이다. 앞선 코드에 @Controller가 있는데, OwnerController가 Bean으로 등록된다는 annotation이다.

일반적으로 자바의 객체는 POJOPlain Old Java Object 객체로 분류된다. 즉, 프레임워크에 종속되지 않은 ✌️평범하고 오래된✌️ 방식의 자바 객체이다. 반면, Bean 객체는 IoC Container 내부에서 생성되고, 의존성 주입을 통해 제공되는 프레임워크에서 관리되는 객체이다.

Bean의 태생과 분류에 대해 이야기하려면 이야기가 길어지므로, 일단은 다음과 같이 이해한다.

Bean 객체는 IoC Container 내부에서 관리되는 객체를 의미한다.

Bean으로 관리되는 것의 장점?

  1. IoC 컨테이너가 의존성 관리를 해주므로 프로그래머가 의존성 관리를 신경 쓰지 않아도 된다.
  2. 싱글톤 형태로 Bean이 제공되기 때문에 객체 생성의 코스트가 절약된다.
    • 일반적으로 visitRepository등의 Repository 객체는 생성 코스트가 큰데, 싱글톤 형태로 제공된다면 코스트가 절약된다.
    • 매번 다른 객체가 생성되는 경우는 프로토 타입 형태이다.
  3. 라이프 사이클이 관리 된다.

결론적으로 IoC Container의 기능은?

  • 빈 설정 소스로부터 빈 정의를 읽어들이고 빈을 구성하고 제공한다.
  • Spring IoC Container의 최상위 인터페이스 이름은 BeanFactory이다.
  • 프로그래머가 가장 많이 사용하게 되는 IoC Container는 ApplicationContext이다.
    • ApplicationContext는 BeanFactory를 상속한다.
    • ApplicationContext는 메세지 소스 처리, 이벤트 발행, 리소스 로딩 등의 다양한 기능을 제공한다.
profile
Keep exploring, 계속 탐색하세요.

0개의 댓글