스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다 (싱글톤 스코프) 스프링의 다양한 스코프 - 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 - 프로토타입 : 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않고 매우 짧은 범위의 스코프 - 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 프로토타입 스코프 싱글톤 빈 요청 1. 싱글톤 스코프의 빈을 스프링 컨테이너에 요청 2. 스프링 컨테이너는 본인이 관리하는 스프링 빈..
빈 생명주기 콜백 DB 커넥션 풀이나, 네트워크 소켓같은 경우 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하려면 객체의 초기화와 종료 작업 필요 public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 public void connect() { System.out.println("connect: " + url); } public v..
의존관계 주입에는 크게 4가지 방법이 있다. - 생성자 주입 - 수정자(setter) 주입 - 필드 주입 - 일반 메서드 주입 생성자 주입 - 생성자를 통해서 주입하는 방법 - 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다 - 불변, 필수 의존관계에 사용 - 생성자가 딱 1개 있으면 @Autowired 생략 가능 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // 생략 가능하다. public OrderServiceImpl(MemberRepo..
- 스프링 빈 등록은 @Bean 또는 을 통해서 설정 정보에 직접 빈 등록 - 스프링 빈이 엄청 많아지면? 많은 문제 발생(누락, 정보 커짐, 등록 귀찮) - 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 지능 제공 @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } - AutoAppConfig.java에 @ComponentScan은 자동으로 컴포넌트 스캔을 해서 빈 등록을 해준다. - 기존의 AppConfig.java와 달리 @Bean으로 등록한 클래스가 없다 -..
웹 애플리케이션과 싱글톤 - 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. - 웹 애플리케이션은 보통 여러 고객이 동시에 요청 - 스프링 없는 순수한 DI 컨테이너로 테스트해보면 memberService에 대한 객체가 각각 다르다는 것을 확인할 수 있다. - 요청할 때마다 AppConfig는 객체를 생성하고 메모리 낭비가 심해지는 문제를 야기한다. 싱글톤 패턴 - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 - 객체 인스턴스 2개 이상 생성하지 못하게 한다 - private 생성자를 이용해서 외부에서 new 키워드를 사용하지 못하도록 한다. public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private stat..
기획자의 요구 : 고정 할인 금액 정책(FixDiscountPolicy) -> 비율 할인 정책(RateDiscountPolicy)으로 변경해주세요. public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 위의 코드처럼 FixDiscountPolicy() -> RateDiscountPolicy()로 변경 다형성 : 역할과 구현 분리 (O) DIP : 클라이언트가 DiscountPolicy 추상 클래스뿐..
다음과 같은 요구 사항이 있다. - 회원 관련 1. 회원 가입 / 조회 가능 2. 회원은 BASIC회원과 VIP 회원이 있다. 3. 회원 데이터는 자체 DB또는 외부 시스템과 연동 (미확정) - 주문 관련 1. 회원은 상품을 주문할 수 있다. 2. 회원 등급에 따라 할인 정책 적용 가능 3. VIP 회원에게는 할인 정책에는 두 가지가 있다. (고정 할인 정책 : 1000원 DC, 비율 할인 정책 : 10%) - 고정 할인 정책을 적용, 변동 가능 회원 도메인 설계 회원 클래스 다이어그램 - 역할과 구현을 분리 (다형성) 회원 엔티티 코드와 회원 저장소(Repository)는 생략합니다. 회원 서비스 회원 서비스 인터페이스 (MemberService) public interface MemberService..
Spring 프레임워크 - 핵심 기술 : 스프링 DI 컨테이너, AOP, 기타 - 웹 기술 : 스프링 MVC - 데이터 접근 기술 : 트랜잭션, JDBC, ORM 등 Spring Boot (스프링 부트) - 스프링을 편리하게 사용할 수 있도록 지원, 그냥 이거 쓰면 된다 - 스프링 어플리케이션 쉽게 생성, Tomcat 같은 웹 서버 따로 설정할 필요 없음 - 손쉬운 빌드 구성을 위한 starter 종속성 제공 (라이브러리) 스프링의 진짜 핵심 - 스프링은 Java 언어 기반의 프레임워크 - Java는? 객체 지향 프로그래밍(Object-Oriented Programming) 언어 - 즉, 스프링은 좋은 객체 지향 프로그래밍을 도와주는 프레임워크 객체 지향 프로그래밍 - 객체 지향 프로그래밍은 프로그램을 ..