Backend/Spring 5

Component Scan

의존 관계 자동 주입 설정정보가 없어도 자동으로 스프링 빈을 등록해 준다. @Autowired 기능도 제공해 준다. 사용방법 □ Config파일에 @ComponentScan Annotation 붙이기 @Configuration @ComponentScan public class AutoAppConfig { } □ 스프링 빈에 등록할 클래스들에 @Component Annotation을 붙인다. @Component public class MemoryMemberRepository implements MemberRepository {} @Component public class RateDiscountPolicy implements DiscountPolicy {} @Component public class Memb..

Backend/Spring 2024.01.09

Singleton Container

□ 스프링 없는 DI 컨테이너로 구성된 경우 스프링 없는 순수한 DI 컨테이너인 AppConfig를 요청할 때마다 새로 생성한다. ex) 트래픽이 초당 100인 경우 초당 100개 객체가 생성되고 소멸된다. → 메모리 낭비가 심하다. 싱글톤 패턴으로 해결 가능 □ 싱글톤 컨테이너를 적용 후 싱글톤 패턴 private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 객체 인스턴스를 2개 이상 생성하지 못하게 막아야 한다. □ 싱글톤 예제 코드 public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonSer..

Backend/Spring 2024.01.09

Container와 Bean

□ 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext는 스프링 컨테이너이다. ApplicationContext는 인터페이스이다. Annotation 기반의 자바 설정 클래스, 스프링 컨테이너는 XML을 기반으로 만들 수 있다. 스프링 컨테이너 생성 과정 □ 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class); 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다. 해당 사진에서는 AppConfig.class 구성 정보로 지정했다. □ 스프링 빈 등록 스..

Backend/Spring 2024.01.08

객체지향원칙 5가지

SRP (Single Responsibility Principle) 단일 책임의 원칙 하나의 모듈이 하나의 책임을 가져야 한다. 모듈이 변경되는 이유가 한 가지여야 한다 장점 변경이 필요할 때 수정할 대상이 명확해진다. ORP (Open-Closed Principle) 개방 폐쇄 원칙 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다는 원칙 확장에 대해 열려있다: 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다. 수정에 닫혀 있다: 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하고나 변경할 수 있다. → 추상화에 의존하면 문제 해결 가능 ISP (Interface Segregation Principle) 인터페이스 분리 원칙 클라이언트의 목적과 용도에 적합한..

Backend/Spring 2024.01.04

스프링 핵심 원리 이해 1, 2

요구사항에 따른 코드 구현 및 설계도는 생략하였다. □ 문제점 코드 public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 이런 코드의 경우 OrderServiceImpl 는 Interface인 OrderService 에 의존하고 있다. (설계된 의도) FixDiscountPolicy(), RateDiscountPolicy()를 직접적으로 객체를 생성하므로 두 클래스에도 의존을 하게된다. → DIP를..

Backend/Spring 2024.01.04