분류 전체보기(63)
-
BeanFactory와 ApplicationContext
BeanFactory와 ApplicationContext 두 가지 모두 스프링 빈을 생성하고 관리하는 스프링 컨테이너이다. DI의 관점에서 초점을 두어 설명할 때 BeanFactory를 쓰기도 한다. BeanFactory는 스프링 컨테이너의 최상위 인터페이스이며 스프링 빈을 관리하고 조회하는 역할을 담당한다. 위의 사진처럼 ApplicationContext는 BeanFactory의 모든 기능을 상속받아서 제공받는다. 그러나 빈을 관리하고 검색하는 기능을 이미 BeanFactory에서 모두 제공하는것이다. 그렇다면 왜 굳이 ApplicationContext를 써야할까? 개발에 필요한 그 외의 기능을 ApplicationContext가 지원해주기 때문이다. 메시지소스를 활용한 국제화 기능 다국어 지원에 따른..
2022.10.26 -
스프링 Bean 조회
해당 예시는 김영한님의 인프런 강의 중 [스프링 핵심 원리]를 바탕으로 합니다. 1) 모든 빈 출력하기 public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 조회") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefin..
2022.10.26 -
스프링 컨테이너와 스프링 빈
해당 예시는 김영한님의 인프런 강의 중 [스프링 핵심 원리]를 바탕으로 합니다. 스프링 컨테이너와 스프링 빈 사용된 이미지는 김영한님의 인프런_[스프링 핵심 원리]에서 참고하였습니다. 스프링 컨테이너란 스프링을 통해 생성된 빈 객체를 생성하고 관리하는 공간이다. ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 여기서 ApplicationContext가 스프링 컨테이너이다. 스프링 컨테이너를 생성하는 코드로서 애노테이션 기반의 자바 설정 클래스(AppConfig)를 생성자 파라미터로 던저줌으로서 그 정보를 가지고 스프링 컨테이너를 만든것이다. BeanFactory도 스프링 컨테이너인데 ApplicationCon..
2022.10.26 -
IOC와 DI
해당 예시는 김영한님의 인프런 강의 중 [스프링 핵심 원리]를 바탕으로 합니다. IOC (Inversion of Control) 제어의 역전 클라이언트 구현 객체가 필요한 객체를 스스로 생성하고 연결하는것이 아닌, 외부에서 관리하는것을 제어의 역전이라 한다. public class OrderServiceImpl implements OrderService{ private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); ... } 위의 코드처럼 serviceImple에 필요한 객체를 직접 new로 생성하고 그 객체를 쓰는것은 IOC가 아닌 일반적인 흐름이다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다고 할 수 있다. DIP와 ..
2022.10.26 -
SRP
해당 예시는 김영한님의 인프런 강의 중 [스프링 핵심 원리]를 바탕으로 합니다. DIP와 OCP와 연결되는 내용입니다. SRP란? SRP (Single Responsibility Principle) : 단일 책임 원칙 한 클래스는 하나의 책임만 가져야한다. 이전의 리팩토링 이전의 코드에서는 serviceImpl에서 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있었다. 이 문제점을 해결하기 위해 구현 객체를 생성하고 연결하는 역할을 해주는 AppConfig를 따로 둠으로써 책임을 분리한다. 객체의 생성과 연결은 AppConfig 가 해주니 serviceImpl에서는 기능 실행하는 책임만 담당하면 된다. 각각의 책임이 확실해진다! 단일책임의 원칙을 준수함으로써 얻어지는 이점은 구현 ..
2022.10.26 -
DIP와 OCP
해당 예시는 김영한님의 인프런 강의 중 [스프링 핵심 원리]를 바탕으로 합니다. 해당 예시는 spring의 의존성 주입 없이 순수 자바로된 예시입니다. 스프링을 사용한 의존성 주입은 후에! DIP란? DIP (Dependency Inversion Principle) : 의존성 역전 원칙 상위 모듈은 하위 모듈에 의존해서는 안된다 추상화는 구체화에 의존하면 안된다. OCP란? OCP (Open Close Principle) : 개방 폐쇠의 원직 확장에는 열려 있고, 변경에는 닫혀 있다. 즉 기능 수정이 있을 때 해당 기능을 사용하는 코드에는 변경이 없도록 한다. 할인 정책이 정률할인과 정액할인 두가지의 방안이 있고 어떤 정책을 쓸지 미확정이라고 가정 했을 때 할인정책의 공통적인 역할과 틀을 interfac..
2022.10.26