스프링 핵심 원리[기본편] - 의존관계 자동 주입
·
Spring
의존관계 주입 방법 생성자 주입 (가장 굿) 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해 의존관계를 주입받는 방법 지금까지 진행한 방법 특징 생성자 호출시점에 딱 1번만 호출됨 불변 , 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPoli..
스프링 핵심 원리[기본편] - 컴포넌트 스캔
·
Spring
컴포넌트 스캔과 의존관계 자동 주입 시작하기 직접 @Bean을 통해 스프링 빈을 지정하다 보면 프로젝트가 커졌을때 귀찮고, 누락되는 정보도 있을것이다. 따라서 설정정보가 없어도 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능을 제공 또한 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공 더보기 스프링 컨테이너와 빈을 사용하는이유 서로 연관되어있는 객체(인스턴스 , 메서드)를 직접가져다 쓰면 ocr을 위반하고 유지보수면에서 불편함이 있기때문 기억하기 AutoAppConfig.java @Configuration 어노테이션은 그대로 -> 설정정보이기 때문 @ComponentScan 어노테이션을 이용하면 자동으로 @Component가 붙은 클래스를 스프링 컨테이너에 빈으로 등록 @Conf..
스프링 핵심 원리[기본편] - 싱글톤 컨테이너
·
Spring
웹 애플리케이션과 싱글톤 한번에 수많은 사람들이 접속함 이때 지금까지의 순수한 자바만의 AppConfig 는 요청마다 객체를 새로 생성 이러면 메모리 낭비가 심해진다. 해결방안으로 해당 객체가 딱 1개만 생성되어 공유하는 싱글톤 패턴이 등장 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 구현방법 static 영역에 객체 instance를 미리 하나 생성 해당 인스턴스가 필요하면 오직 getter를 통해서만 조회가능. 호출하면 static영역이기에 같은 인스턴스만이 반환됨 생성자를 private로 막아 외부에서 new로 해당 인스턴스를 생성하는것을 막음 public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. pri..
스프링 핵심 원리[기본편] - 스프링 컨테이너와 스프링 빈
·
Spring
스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너(인터페이스)라 한다. AnnotationConfigApplicationContext()은 ApplicationContext의 구현체이다. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 스프링 컨테이너의 생성 과정 1. 스프링 컨테이너 생성 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class) 스프링 컨테..
스프링 핵심 원리[기본편] - 예제만들기 , 객체 지향 원리 적용
·
Spring
예제 만들기 주문과 할인 도메인 설계 주문 도메인 협력, 역할, 책임 주문 도메인 전체 주문 도메인 클래스 다이어그램 주문과 할인 도메인 개발 주문서비스 구현체 주문 구현체를 작성시 다음과 같이 인스턴스를 생성해주면 OCP, DIP 같은 객체지향 설계원칙을 준수하지 못한다. DIP : 주문서비스 클라이언트(OrderServiceImpl)은 추상(인터페이스)뿐만 아닌 구체 클래스(FixDiscountPolicy)를 의존하고 있다. OCP : 만약 할인 정책을 변경하거나 저장소를 변경할시 클라이언트(구현체)에 영향을 준다.(일일이 변경해줘야한다.) public class OrderServiceImpl implements OrderService { private final MemberRepository mem..