전체 글80 의존관계 자동 주입 생성자 주입@Componentpublic class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // 생략 가능 public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } ...}생성자.. 2024. 8. 29. @ComponentScan @ComponentScan@Bean 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 지정등록해야 할 스프링 빈이 수십, 수백개라면 누락 등 문제 발생설정 정보가 없어도 자동으로 스프링 빈을 등록하는 기능@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록함이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용기본 : MemberServiceImple 클래스 -> memberServiceImpl직접 지정 : @Component("memberServiceImpl2)생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입기본 조회 전략은 타입이 같은 빈을 찾아서 주입생성자에 파라미터가 많아도 다 찾아서 자동으로 .. 2024. 8. 21. @Configuration @ConfigurationBean을 등록할 때 싱글톤이 되도록 보장해 주는 어노테이션스프링 컨테이너에서 Bean을 관리할 수 있게 됨결론적으로 스프링 설정 정보는 항상 @Configuration 사용AppConfigpackage hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.FixDiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberService;import hello.core.member.MemberServiceImpl;import hello.core.member.MemoryMemberReposit.. 2024. 8. 20. Singleton 싱글톤 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 함SingletonServicepackage hello.singleton;public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance(){ return instance; } private SingletonService(){ } public void logic(){ System.out.p.. 2024. 8. 20. 스프링 컨테이너 ApplicaitonContextAnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);스프링 컨테이너라고 부름인터페이스스프링 컨테이너 생성 과정스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 함여기서는 AppConfig.class를 구성 정보로 지정빈 이름은 메서드 이름을 사용빈 이름은 직접 부여 가능@Bean(name = "빈 이름 지정")빈 이름은 항상 다른 이름을 부여스프링으로 전환하기package hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.FixDiscountPolicy;i.. 2024. 8. 17. AppConfig 할인 정책 적용과 문제점public class OrderServiceImpl implements OrderService { //private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy();}문제점1. DIP 위반 : 인터페이스 뿐만 아니라 구현 클래스에도 의존추상 인터페이스 의존 : DiscountPolicy구현 클래스 의존 : FixDiscountPolicy, RateDiscountPolicy2. OCP 위반 : 기능을 확장해서 변경하려면 클라이언트 코드에 영향을 줌FixDiscountPolicy에서 Rat.. 2024. 8. 15. 이전 1 ··· 4 5 6 7 8 9 10 ··· 14 다음