MemberServiceImpl은 MemberRepository interface를 의존한다. 그러나 실제 할당하는 인스턴스는 구현체를 의존함.
--> 추상화와 구체화 모두 의존함. DIP 위반
*DIP(dependency inversion principle) 의존관계 역전 원칙
-> 구체화에 의존하지 말고, 추상화에 의존해야함.
설계가 잘되었다.
위 클래스(orderservice) 입장에서는 할인에 대해선 모름. 그냥 discountPolicy가 알아서 해줘라고 던져주는 것임.
만약 할인이 변경된다? 하면 할인 부분만 변경하면 됨. 전체 코드를 변경할 필요가 없음.
--> *단일 책임 원칙이 잘 지켜짐.
*SRP(Single responsibility principle) 단일 책임 원칙
-> 한 클래스는 하나의 책임만 가져야 한다.
Test할 때
given, when, then을 사용한다.
isSameAs VS isEqualTo
isSameAs는 same reference, isEqualTo는 equal based on value이다.
그러나 2번처럼 객체끼리 isEqualTo를 해도 테스트가 맞게 된다.
왜?
-> isEqualTo는 값을 비교하는 메서드이지만 객체를 비교하게 되는 경우 참조를 비교하게 된다.
위의 사진과 같이 fido와 fidosClone 객체는 다른 객체를 나타낸다.
isEqualTo를 사용하게 되면 fail하게 된다. 즉, 이 말은 객체를 비교한 것이다.
QnA에 여쭤보니 isEqualTo는 객체를 비교하게 되는 경우 참조를 비교하는 것이라고 하셨다.
reference
https://www.baeldung.com/introduction-to-assertj
출처 : 인프런 스프링 핵심 원리 - 기본편 (김영한 강사님)
'Spring 강의 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
스프링 핵심 원리 - 의존관계 자동 주입(2022.03.12 수정) (0) | 2021.08.06 |
---|---|
스프링 핵심 원리 - 컴포넌트 스캔 (0) | 2021.08.06 |
스프링 핵심 원리 - 싱글톤 컨테이너 (0) | 2021.08.04 |
스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈 (0) | 2021.08.02 |
스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) | 2021.07.30 |