인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이전 시간에 우리는 스프링 컨테이너가 자동으로 구성해주는 Singleton에 대해서 공부했다. 이번 섹션에서는 또!! 스프링에서 제공하는 강력한 기능을 공부할 예정이다. 바로 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능이다. 김영한 강사님의 명강을 들으며 오늘도 열심히 달려보자! 목차 컴포넌트 스캔과 의존관계 자동 주입 시작하기 탐색 위치와 기본 스캔 대상 1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 우리는 지금까지 빈 등록을 위해서 클래스 파일이나 XML 파일로 빈 설정 정보를 작성했다. 빈을 수동으로 설정했던 내용이 기억이 나지 않는다면 아래 포스팅 글 참조! Section4(1편) 스프링 ..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. DIP, OCP 법칙을 준수하며 Dependency Injection을 사용해 개발을 진행해보고, 스프링 빈을 사용해 스프링 컨테이너에서 인스턴스들을 관리하는 코드를 작성해보았다. 그리고 빈이 어떻게 설정되는지까지 배워보았다. Section4까지의 강의를 학습해보면 딱히 왜 스프링 컨테이너를 사용하는지 이유를 찾을 수 없었다. 왜냐하면 순수 자바 코드로 작성해도 같은 결과를 가져왔다고 생각했기 때문이다. 하지만! 사실 스프링 컨테이너를 사용했을 때 엄청난 차이가 있었다. 바로 Singleton 패턴을 자동으로 적용해준다는 것이다. 물론 자바 코드로도 Singleton 패턴을 적용할 수 있다. 하지만 자동! 으로 해준다는건 그만큼 ..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이번 시간에는 다양한 형식으로 빈 설정 정보를 등록할 수 있게 해주는 BeanDefinition에 대해 김영한 강사님의 강의를 바탕으로 정리해보겠다. BeanDefinition 김영한 강사님의 강의를 열심히 들었다면 위 구조를 보고 역할과 구현으로 나누어진 구조라는 것을 알아챘을 것이다. BeanDefinition이 역할을 담당하고 AppConfig가 구현을 담당하고있다. 그리고 스프링 컨테이너는 BeanDefinition에 의존하고 있다. 이전 강의에서 AppConfig가 빈 설정 정보를 가지고 있고 파일 안의 내용을 기준으로 스프링 컨테이너에 빈 설정 정보를 등록해준다고 했는데 정작 스프링 컨테이너는 BeanDefinition..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이전 시간에는 스프링 컨테이너에 빈이 등록되는 과정과 빈 조회 방법을 학습해 보았다. 이번시간에는 스프링 컨테이너를 생성하기 위해 사용했던 AnnotationConfigApplicationContext 클래스와 스프링 컨테이너의 최상위 인터페이스인 BeanFactory, 그리고 BeanFactory를 상속받고 있는 ApplicationContext에 대해서 김영한 강사님의 강의를 통해 학습해 보겠다. AnnotationConfigApplicationContext 클래스의 상속 구조 우리가 컨테이너 생성을 위해 사용했던 AnnotationConfigApplicationContext 클래스는 위 그림과 같이 상속을 받고 있다. 각 인..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. Section3까지는 OCP, DIP를 지키는 코드를 순수 자바 코드로도 작성해보고 스프링을 사용한 코드로 리팩토링도 해보았다. 이때 우리는 스프링 컨테이너라는 곳에 의존성 주입을 시킨 Bean을 등록하고 사용했었는데, Section4에서는 Bean이 컨테이너에 어떤 형태로 등록되고 원하는 빈을 어떻게 찾을 수 있는지 김영한 강사님의 강의를 토대로 학습해 보겠다. 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 이전 시간에 사용했던 스프링 컨테이너 생성 코드 우리는 위의 도식화된 이미지..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이전 시간에 의존성 주입을 통해 의존성 역전 법칙을 준수하기 위해 AppConfig 클래스 파일을 생성했다. AppConfig 클래스 파일에서 역할에 맞는 구현체를 설정시켜줌으로써 클라이언트 수정 없이 구현체 변경이 가능해졌다. 이 모든 과정을 순수한 자바코드로 작성했는데, 이번 시간부터 순수 코드로 작성했던 Dependency Injection 코드를 김영한 강사님의 강의를 바탕으로 스프링을 이용한 코드로 리팩토링 해보겠다! 스프링의 Bean을 활용한 의존성 주입 의존성 주입 = Dependency Injection 원리는 스프링 컨테이너라는 곳에 DI를 주입했던 코드들을 빈으로 등록해놓고 필요시 등록된 빈을 꺼내 사용하는 흐름..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이전 시간에 기존에 작성했던 코드가 왜 DIP, OCP를 위반한 코드였는지 할인 정책을 통해 학습했다. 이번 시간에는 김영한 강사님의 강의와 같이 DIP, OCP를 지키기 위한 의존성 주입에 대한 것과 제어의 역전에 관해 공부해 보겠다. 의존성 주입의존관계 역전 법칙(DIP)을 위배하지 않으려면 구현체를 담당하는 클래스가 다른 구현체에 의존하면 안된다. 오직 역할을 담당하는 인터페이스에만 의존해야 한다. 그렇다면 OrderService 구현체에서 다른 구현체를 선언하면 안되기 때문에 다음과 같이 코드를 수정해야 한다.하지만 이때!! 구현체 없이 위 처럼 선언하게 되면 NullPointerException이 발생한다!그렇다면 Ord..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이전 시간까지 주어진 요구사항을 토대로 도메인을 설계하고 코드를 작성해보았다. 그리고 코드를 실행시켜보며 원하는 값이 반환되는지 확인했다. 이번 Section3부터는 김영한 강사님의 강의와 같이 할인 정책을 변경해보며 기존 코드에 어떤 문제가 있고 코드를 어떻게 리팩토링해야 좋은 객체 지향 설계를 할 수 있는지 정리해보겠다. Let's make it happen!!! 변경된 할인 요구사항주문 서비스 개발을 진행하는 중 할인 정책을 개발해야 한다.기존 정책인 정액(고정) 할인 정책에서 VIP 등급이라면 구매한 가격에 10% 할인이 적용되는 정률 할인 정책으로 서비스를 변경해야 한다.정률 할인 정책 구현체 개발할인 정책은 처음부터 역..