회원 도메인 개발
구현

public enum Grade {
BASIC,
VIP
}
테스트

이제 위의 다이어그램처럼 실제 객체를 참조하도록 만들어보자.
public class MemberApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("new member = " + member.getName());
System.out.println("findMember = " + findMember.getName());
}
}
new member = memberA
findMember = memberA
스프링 없이 순수 자바 코드로 만들었음에도 값이 제대로 나왔다.
public class MemberServiceTest {
MemberService memberService = new MemberServiceImpl();
@Test
void join() {
// given
Member member = new Member(1L, "memberA", Grade.VIP);
// when
memberService.join(member);
Member findMember = memberService.findMember(1L);
// then
Assertions.assertThat(member).isEqualTo(findMember);
}
매번 메인 메서드에서 실행해볼 수 없으므로 테스트 코드를 구현해보자.
문제점
만약 다른 repository로 변경할 OCP 원칙을 준수할까?
DIP를 잘 지키고 있을까?
public class MemberServiceImpl implements MemberService {
// 추상화와 구현 모두에 의존하고 있다.
private final MemberRepository memberRepository = new MemoryMemberRepository();
}
의존 관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제가 있다.
Last updated
Was this helpful?