💻 스프링 핵심 기술 - 기초
해당 강의는 김영한님의 스프링 핵심 원리- 기초 강의를 수강하여 공부한 내용은 간략하게 기록하는 기록장
스프링 핵심 원리 기초 강의
기존 프로그램은 클라이언트 구현객체가 스스로 필요한 서버 구현 객체를 생성하고 연결, 실행
구현 객체가 프로그램 제어 흐름을 스스로 조종
AppConfig 등장 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당
프로그램의 제어 흐름은 이제 AppConfig 가 가져간다
즉 OrderServiceImpl은 필요한 인터페이스들을 호출하지만 구현 객체에 대한 제어권은 하나도 없다.
ex)요리사가 요리는 신나게 하는데 정작 자기가 가져오는 재료들의 원산지나 재배자가 누구인지는 모르는 거라고 이해된다.
✅ 프로그램의 제어 흐름을 외부에서 관리하는 것이 제어의 역전 IoC라고함
프레임워크가 내가 작성한 코드를 제어하고, 대신실행하면 그것은 프레임워크가 맞다.
반면에 내가 작성한 코드가 직접 제어흐름을 담당하면 라이브러리
현재 까지 실습에서 쓴 프레임워크는 JUnit
OrderServiceImpl이 할인 정책 인터페이스에만 의존하도록 변경했음
즉 구현객체는 저 소스코드에서는 죽어도 모른다.
의존관계는 정적인 클래스 의존관계와 실행 시점에 결정되는 동적 객체(인스턴스) 의존 관계를 분리해서 생각
클래스가 사용하는 import 코드만 보고 쉽게 의존관계 판단 가능
정적인 의존관계는 실행하지 않아도 식별가능하다.
OrderServiceImpl은 MemberRepository, DiscountPolicy에 의존하는건 안다.
클래스 의존 관계 만으로는 어떤 실제 객체(인스턴스)가 주입될지는 모름
어플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계
어플리케이션 실행시험에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것을 의존관계 주입이라고 한다.
객체 인스턴스를 생성하고 참조를 전달해서 연결
의존관계 주입을 사용하면 클라이언트 코드를 변경하지 않고 호출 대상 타입의 인스턴스 변경 가능
즉 정적인 클래스 의존관계는 유지한채로 동적 인스턴스 의존관계만 바꿀수 있음
AppConfig 처럼 객체를 생성하고 연결해주는 것을 IoC 컨테이너, DI 컨테이너라 한다.
의존관계 주입에 초점을 맞춰서 대부분 DI 컨테이너라 한다.
이를 앞으로 Spring이 대신 해줄거다 (다른 프레임워크도 많음)