뭔가 단순히 프로젝트 내용을 열거하는 것보다, 실제로 개발해보면서 마주친 에러들, 어려운 내용들을 정리해보자.
✅ 테스트 코드 작성 방법을 given, when, then 으로 나눠서 작성해보자.
@Test
void join() {
//given, 특정 member 주어졌을 때
Member member = new Member(1, "spring", Grade.VIP);
//when, 특정 기능 테스트 (회원 가입)
memberService.join(member);
Member findMember = memberService.findMember(1);
//then, 같은 값인지 테스트.
Assertions.assertThat(findMember).isEqualTo(member);
}
단일 책임 원칙이 잘 지켜진 설계이다 !
// OrderServiceImpl.java
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
🤔 회원 도메인, 주문 도메인처럼 하나의 클래스로 구성해야 하는 경우 ?
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
✅ SRP (Single Responsible Principle) 단일 책임 원칙
✅ OCP (Open / Closed Principle) 개방-폐쇄 원칙
✅ LSP (Liskov substitution principle) 리스코프 치환 원칙
✅ ISP (Interface Segregation Principle) 인터페이스 분리 원칙
✅ DIP (Dependecy Inversion Principle) 의존관계 역전 원칙
⭐ 결론