Spring/스프링 핵심 원리 - 기본편

[이해1 - 예제 만들기] 회원 도메인 설계 → 개발 → 테스트

alsruds 2023. 11. 7. 03:05
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

회원 도메인 설계하기

· 회원 도메인 요구사항

          》회원 가입 & 조회

          》회원 등급 : 일반, VIP

          》(미확정) 회원 데이터 자체 DB 구축 가능, 외부 시스템 연동 가능성

 

·  회원 도메인 협력 관계

 

·  회원 클래스 다이어그램

➡️ 인터페이스 : MemberService

➡️ 구현체 : MemberServiceImpl

➡️ MemberRepository = 회원 저장소

 

·  회원 객체 다이어그램 (객체 간 메모리 참조)

➡️ 회원 서비스 : MemberServiceImpl

 

회원 도메인 개발하기

1. 회원 Package 생성 : member

 

2. 회원 등급 Enum 생성 (Grade) → BASIC, VIP

 

3. Member Class 생성 id, name, grade

 

4. MemberRepository Interface 생성

public interface MemberRepository {
	void save(Member member);
	Member findById(Long memberId);
}

 

5. MemberRepository 구현체 Class 생성 : MemoryMemberRepository

· Map<Long, Member> store = new HashMap<>()

· save : store.put(member.getId(), member)

· findById : store.get(memberId)

 

6. MemberService Interface 생성

public interface MemberService {
	void join(Member member); // 회원 가입
	Member findMember(Long memberId); // 회원 조회
}

 

7. MemberService 구현체 Class 생성 : MemberServiceImpl

· MemberRepository memberRepository = new MemoryMemberRepository()

· join : memberRepository.save(member)

· findMember : memberRepository.findById(memberId)

 

Test

1. main/java/hello.core/MemberApp Class 생성 후 테스트

public class MemberApp {
    public static void main(String[] args) { // psvm
        // 회원 가입
        MemberService memberService = new MemberServiceImpl();
        Member member = new Member(1L, "memberA", Grade.VIP); // ctrl + alt + v
        memberService.join(member);

        // 회원 조회
        Member findMember = memberService.findMember(1L);
        System.out.println("new member = " + member.getName());
        System.out.println("findMember = " + findMember.getName());
    }
}

 

2. test/java/hello.core/member Package 생성

 

3. 생성한 패키지에 MemberServiceTest Class 생성 후 테스트

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);
    }
}

테스트 성공~

 

문제점
- 인터페이스 뿐만이 아니라 구현체도 직접 호출 중