ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [김영한 스프링] 03. 회원 도메인
    Spring/스프링 핵심 원리 - 기본편 2023. 4. 5. 21:36

    회원 도메인 요구사항

    • 회원을 가입하고 조회할 수 있다.
    • 회원은 일반과 VIP 두 가지 등급이 있다.
    • 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)

     

     

     

     

    Grade.java

    package hello.core.member;

    public enum Grade {
        BASIC,
        VIP
    }

     

    Member.java

    main/java/hello.core/member/Member 생성

     

    생성자 생성

     

    package hello.core.member;

    public class Member {
        private Long id;
        private String name;
        private Grade grade;
        
        public Member(Long id, String name, Grade grade) {
            this.id = id;
            this.name = name;
            this.grade = grade;
        }
        
        public Long getId() {
            return id;
        }
        
        public void setId(Long id) {
            this.id = id;
        }
        
        public String getName() {
            return name;
        }
        
        public void setName(String name) {
            this.name = name;
        }
        
        public Grade getGrade() {
            return grade;
        }
        
        public void setGrade(Grade grade) {
            this.grade = grade;
        }
    }

    getter, setter 생성

     

    MemberRepository.java

    package hello.core.member;

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

    main/java/hello.core/member/MemberRepository 생성

     

    회원 저장, 회원 id 찾는 기능 구현

     

    MemoryMemberRepository.java

    main/java/hello.core/member/MemoryMemberRepository 생성

     

    메서드 구현

     

    package hello.core.member;

    import java.util.HashMap;
    import java.util.Map;

    public class MemoryMemberRepository implements MemberRepository {
        
        private static Map<Long, Member> store = new HashMap<>();
        
        @Override
        public void save(Member member) {
            store.put(member.getId(), member);
        }
        
        @Override
        public Member findById(Long memberId) {
            return store.get(memberId);
        }
    }

    save와 findById 작성

     

    MemberService.java

    package hello.core.member;

    public interface MemberService {
        
        void join(Member member);
        
        Member findMember(Long memberId);
    }

    main/java/hello.core/member/MemberService 생성

     

    join, findMember 구현

     

    MemberServiceImpl.java

    main/java/hello.core/member/MemberServiceImpl 생성

     

    메서드 구현

     

    package hello.core.member;

    public class MemberServiceImpl implements MemberService {
        
        private final MemberRepository memberRepository = new MemoryMemberRepository();
        
        @Override
        public void join(Member member) {
            memberRepository.save(member);
        }
        
        @Override
        public Member findMember(Long memberId) {
            return memberRepository.findById(memberId);
        }
    }

    join, findMember 작성

     

    MemberApp.java

    main/java/hello.core/MemberApp 생성

     

    package hello.core;

    import hello.core.member.Grade;
    import hello.core.member.Member;
    import hello.core.member.MemberService;
    import hello.core.member.MemberServiceImpl;

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

     

     

    MemberServiceTest.java

    test/java/hello.core/member/MemberServiceTest 생성

     

    package hello.core.member;

    import org.assertj.core.api.Assertions;
    import org.junit.jupiter.api.Test;

    public class MemberServiceTest {
       
        MemberService memberService = new MemberServiceImpl();
        
        @Test
        void join() {
            //given
            Member member = new Member(2L, "memberA", Grade.VIP);
            
            //when
            memberService.join(member);
            Member findMember = memberService.findMember(1L);
            
            //then
            Assertions.assertThat(member).isEqualTo(findMember);
        }
    }

     

    출처 : 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

     

    스프링 핵심 원리 - 기본편 - 인프런 | 강의

    스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런

    www.inflearn.com

Designed by Tistory.