본문 바로가기

Spring/Spring Basic9

자동으로 스프링 빈을 등록하는 '컴포넌트 스캔(@ComponentScan)' @ComponentScan을 사용하는 이유 스프링 빈을 등록할 때 지금까지 직접 등록할 스프링 빈을 나열해서 작성했다. 지금은 빈으로 등록할게 별로 없어서 다행이였지만 실제로는 이렇게 등록해야하는 빈이 수백개가 된다면 귀찮고 설정 정보도 커지고 누락하는 문제도 발생한다. 이때 생겨난 기능이 바로 자동으로 스프링 빈을 등록하는 '컴포넌트 스캔' 이다. @ComponentScan 란 컴포넌트 스캔은 이름 그대로 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. @ComponentScan 사용방법 컴포넌트 스캔을 사용하는 방법은 굉장히 간단하다. @ComponentScan 을 설정 정보에 붙여주면 된다. 그 다음은 각 클래스가 컴포넌트 스캔의 대상이 되도록 @Component 애.. 2022. 9. 19.
Spring과 싱글톤(@Configuration) Spring에서는 싱글톤 패턴을 이용한다. 어디서 사용하고 왜 사용하는지 이유를 알아보자 웹 애플리케이션에서 왜 싱글톤 패턴을 사용 할까? 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링 없는 순수한 DI 컨테이너 package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.Membe.. 2022. 9. 9.
IoC 컨테이너, DI 컨테이너 IoC 컨테이너, DI 컨테이너 AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라 한다. 의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라 한다. 또는 어샘블러, 오브젝트 팩토리 등으로 불리기도 한다. 출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8 2022. 9. 8.
의존관계 주입 DI(Dependency Injection) 의존관계 주입 DI(Dependency Injection) OrderServiceImpl 은 DiscountPolicy 인터페이스에 의존한다. 실제 어떤 구현 객체가 사용될지는 모른다. 오직 AppConfig만 안다. 의존관계는 정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계 둘을 분리해서 생각해야 한다. 정적인 클래스 의존관계 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단할 수 있다. 정적인 의존관계는 애플리케이션을 실행하지 않아도 분석할 수 있다. OrderServiceImpl 은 MemberRepository , DiscountPolicy 에 의존한다는 것을 알 수 있다 그런데 이러한 클래스 의존관계 만으로는 실제 어떤 객체가 OrderServi.. 2022. 9. 8.
제어의 역전IoC(Inversion of Control) 애플리케이션을 하나의 공연이라 생각해보자. 각각의 인터페이스를 배역(배우 역할)이라 생각하자. 이전 코드는 마치 로미오 역할(인터페이스)을 하는 레오나르도 디카프리오(구현체, 배우)가 줄리엣 역할(인터페이스)을 하는 여자 주인공(구현체, 배우)을 직접 초빙하는 것과 같다. 공연을 구성하고, 담당 배우를 섭외하고, 역할에 맞는 배우를 지정하는 책임을 담당하는 별도의 공연 기획자가 나올시점이다. 공연 기획자를 만들고, 배우와 공연 기획자의 책임을 확실히 분리하자. AppConfig의 등장 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스를 만들자. AppConfig는 애플리케이션의 실제 동작에 필요한 구현 객체를 생성한다. App.. 2022. 9. 8.
도메인 설계 하기 회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 미확정 된 부분이 존재한다. 확정 될때까지 무기한 기다릴수 없다. 인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있게 설계해야한다. 회원 도메인 설계 객체 다이어그램은 객체가 참조를 나타낸다. 회원 서비스: MemberServiceImpl 회원 도메인 개발 도메인 요구사항 두번째 기본과 VIP 등급을 Enum 형태로 만든다. 주문과 할인 도메인 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적.. 2022. 9. 5.