스프링/SpringBasicCore

인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이번 시간에는 다양한 형식으로 빈 설정 정보를 등록할 수 있게 해주는 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% 할인이 적용되는 정률 할인 정책으로 서비스를 변경해야 한다.정률 할인 정책 구현체 개발할인 정책은 처음부터 역..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 이번 강의부터 순수 자바를 이용해 개발을 진행한다. 처음에는 OCP, DIP가 지켜지지 않는 코드를 작성해보고, 이후에 코드를 리팩토링하며 좋은 객체지향 설계 원칙을 지켰을 때의 효과를 뚜렸하게 느껴보는 것이 Session2, Session3의 목표이다. 그럼 요구사항에 맞춰서 개발해보자! 요구사항과 설계 Store에서 주문 서비스 프로그램을 의뢰했다고 가정한다. 회원 회원가입, 조회기능이 있다. VIP, BASIC 등급으로 나누어진다. DB를 자체 구축할 수 있고, 외부 시스템과 연동할 수도 있다.(미정) 할인 할인 기능이 있다. 고정 할인 정책 또는 회원 할인 정책 두 가지 중 하나를 사용할 수 있다.(미정) 주문 주문 기능이..
인프런 강의 中 김영한 강사님의 '스프링 핵심 원리' 내용을 정리했습니다. 정보처리기사를 공부해 봤던 사람들이라면 SOLID를 알 것이다. 필자도 대학교 4학년 때 벼락치기로 공부해서 어렴풋이 기억은 나지만 이 내용이 객체 지향 프로그래밍을 할 때 이렇게 중요한 부분인 줄 몰랐다. 김영한 강사님께서 잘 설명해주신만큼 확실하게 정리하고 가려고 한다. 이전 시간에 우리는 스프링이 왜 탄생하게 되었는지 배웠다. 스프링 이전 EJB를 사용할 당시 객체지향의 이점을 살려서 개발을 진행하지 못했던 부분이 스프링 프레임워크를 탄생시킨 주요 원인 중 하나라고 배웠다. 그렇다면 객체지향의 이점을 살린 코드는 어떤 코드인가?라는 모호한 생각이 들 수 있는데, 좋은 객체지향 설계 원칙을 보면 바로 이해할 수 있다. 좋은 객..
나는웅쓰
'스프링/SpringBasicCore' 카테고리의 글 목록 (2 Page)