package hello.core.member;
public enum Grade {
BASIC,
VIP
}
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;
}
}
MemberRepository
package hello.core.member;
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
MemberService
package hello.core.member;
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
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);
}
}
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);
}
}
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();
// Ctrl + Alt + V - 반환 되는 값에 맞는 인스턴스를 자동 기입
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("find Member =" + findMember.getName());
}
}
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(1L , "memberA" , Grade.VIP);
//when
memberService.join(member);
Member findMember = memberService.findMember(1L);
//then
Assertions.assertThat(member).isEqualTo(findMember);
}
}
회원 도메인 개발 및 테스트(Memory)
비즈니스 요구사항과 설계
인터페이스를 만들고 구현체를 얼마든지 갈아끼울 수 있도록 설계한다. 지금은 스프링없는 순수한 자바로만 개발을 진행한다. 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지
write-read.tistory.com
Grade
Member
MemberRepository
MemberService
MemberServiceImpl
MemoryMemberRepository
MemberApp (순수 자바 코드로 테스트)
MemberServiceTest
회원 도메인 설계의 문제점
스프링 핵심 원리 - 기본편 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온
www.inflearn.com
'스프링 핵심 원리 > 스프링 핵심 원리 이해' 카테고리의 다른 글