(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 4. 롬복과 최신 트랜드 개발을 하면 대부분 불변이므로 필드에 final 키워드를 사용하게 된다. 생성자 주입 방식은 생성자도 만들어야하고 주입 받은 값을 대입하는 코드도 만들어야하는데, 필드 주입처럼 편하게 사용하기 위해 롬복 라이브러리를 사용한다. 1. 기본 코드 @Component public class OrderServiceImpl implements OrderService{ // 1. 필드에 final 키워드 사용 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; // 2. 생성자 만들기 @Autowire..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 2. 옵션 처리 @Autowired를 사용했지만 주입할 스프링 빈이 없어도 동작해야할 때가 있다. 자동 주입할 대상이 없을 때, @Autowired만 사용하면 오류가 발생한다. (기본적으로 required=true이기 떄문에) package hello.core.autowired; public class AutowiredTest { @Test void AutoWiredOption() { // TestBean 스프링 빈 등록 ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class); } static class TestBean { // 자동으로 주입할 ..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 다양한 의존관계 주입 방법 1) 생성자 주입 -> 가장 많이 사용 2) 수정자 주입(setter 주입) 3) 필드 주입 4) 일반 메서드 주입 1. 생성자 주입 생성자를 통해서 의존 관계를 주입받는 방법이다. (지금까지 우리가 진행했던 방법) 1) 특징 - 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. - 불변, 필수 의존관계에 사용 2) 생성자 주입 코드 작성 package hello.core.order; @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; pri..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 자바 코드의 @Bean이나 XML의 을 통해서 설정 정보에 직접 스프링 빈을 등록했다. 예제에서는 등록해야할 스프링 빈이 몇 개가 안됐지만 규모가 커지면 반복과 누락의 문제가 있다... 그래서, 1) 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 2) 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 기존 AppConfig.java는 과거 코드, 테스트를 유지하기 위해 남겨두고 새로운 AutoAppConfig.java를 만들자. 1. AutoAppConfig.java - @ComponentScan 1..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 8. Ioc, DI, 그리고 컨테이너 1. 제어의 역전: Ioc(Inversion of Control) 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라 한다. 1) 기존 프로그램 기존 프로그램은 구현 객체가 프로그램 제어 흐름을 스스로 제어했다. - 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성, 연결, 실행 했다. 2) AppConfig 등장 AppConfig의 등장 후, 구현 객체는 자신의 로직을 실행하는 역할만 담당하고 프로그램의 제어 흐름은 AppConfig가 가져간다. - OrderServiceImpl은 필요한 인터페이스를 호출하지만 어떤 구현 객체들이 실행될..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 3. 관심사의 분리 "애플리케이션 = 공연, 각 인테페이스 = 배역(역할), 구현 객체 = 배우" 라고 생각해보자. 그런데 실제 배역을 맞는 배우를 선택하는 것은 누가 하는가?? 이전 코드는 로미오 역할(인터페이스)를 하는 레오나르도 디카프리오 배우(구현 객체)가 줄리엣 역할(인터페이스)를 하는 올리비아 핫세 배우(구현 객체)를 직접 초빙하는 것과 같다. 디카프리오는 공연도 해야하고 동시에 여자 주인공도 직접 초빙해야하는 다양한 책임을 갖고 있다. 1. 관심사를 분리하자 - 배우는 본인의 역할인 배역을 수행하는 것에만 집중해야 한다. - 디카프리오는 어떤 여자 주인공이 선택되더라도 똑같이 공연을 할 수 있어야 한다. - 공연을 구..