스프링/1. 스프링 핵심 원리 47

17강. IoC, DI, 컨테이너

IoC 제어흐름 역전 프레임워크가 알아서 구현객체 생성, 본래 클라이언트가 스스로 객체생성, 연결, 실행이 자연스러운 흐름이었지만, AppConfig 등장 이후 각 구현체는 자신의 로직만 담당. 프레임워크 vs 라이브러리 프레임워크: 내가 작성한 코드들을 제어, 대신 실행 라이브러리: 내가 제어 흐름을 담당하는 코드를 직접 짜면 라이브러리 정적인 객체 의존관계 코드만 보고 알 수 있는 의존관계들. public class OrderServiceImpl implements OrderService{ private MemberRepository memberRepository; private DiscountPolicy discountPolicy; public OrderServiceImpl(MemberReposit..

16강. Rate할인으로 변경

AppConfig 덕에 앱의 사용 영역과 구성 영역이 분리 public class AppConfig { public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } private MemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } private DiscountPolicy discountPolicy() { return new RateDis..

15강. AppConfig 리팩토링

기존 어떤 구현체가 써져 있었는지 잘 안보임. public class AppConfig { public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } private MemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } private DiscountPolicy discountPolicy() { return new FixDscountPoli..

14강. 관심사의 분리

결국, 역할은 있지만 그걸 구체적으로 누가 할지 선택하는 감독자 역할이 필요. 그 감독자가 컨테이너 public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findMember(Long memberId) { r..

13강. 퍼센트 할인정책 추가의 문제점.

public class OrderServiceImpl implements OrderService{ private MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice)..

12강. 퍼센트 할인정책 구현 + 테스트

public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP){ return price * discountPercent / 100; }else{ return 0; } } } 저 할인 퍼센트.. 처음에 그냥 간단하게 price / discountPercent 이렇게 생각했는데 그러면 안된다.. 로직이 어렵다고 해서 뭔소린가 했더니.. 이게 참 테스트가 중요하다.. 다방면으로 테스트 해 봐야 한다. price = 10000,discountPe..