회원 도메인 개발

구현

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