하나씩 차근차근
article thumbnail

이번 포스트에서는 회원 도메인의 요구사항을 토대로 설계를 해보겠습니다.

 

요구사항

  • 회원가입과 조회
  • 회원등급은 일반과 VIP
  • 회원 데이터는 자체 DB 또는 외부 시스템과 연동

 

회원 엔티티

먼저 회원등급을 위한 Grade 라는 eum 을 member 패키지를 하나 만들어서 생성합니다.

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

 

회원 저장소

다음으로 회원 저장소 인터페이스와 구현체를 생성하겠습니다.

package hello.core.member;

public interface MemberRepository {

	void save(Member member);
	
	Member findById(Long memberId);
}

회원 저장소 인터페이스는 회원을 저장하는 save 와 회원을 찾는 findById 를 추상클래스로 만듭니다.

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) {
		// TODO Auto-generated method stub
		
		store.put(member.getId(), member);
		
	}

	@Override
	public Member findById(Long memberId) {
		// TODO Auto-generated method stub
		return store.get(memberId);
	}
}

회원 저장소 인터페이스를 상속받아 인터페이스를 구현한 MemoryMemberRepository 는 Map 에 Member 를 저장합니다.

 

회원 서비스

다음으로 회원 가입을 하고 아이디를 찾는 회원 서비스를 작성하겠습니다.

회원 저장소와 동일하게 인터페이스를 먼저 구현합니다.

package hello.core.member;

public interface MemberService {

	void join(Member member);
	
	Member findMember(Long memberId);
}

 

다음으로 인터페이스를 구현한 구현체를 작성합니다.

package hello.core.member;

public class MemberServiceImpl implements MemberService {

	private final MemberRepository memberRepository = new MemoryMemberRepository();
	
	@Override
	public void join(Member member) {
		// TODO Auto-generated method stub
		memberRepository.save(member);
	}

	@Override
	public Member findMember(Long memberId) {
		// TODO Auto-generated method stub
		return memberRepository.findById(memberId);
	}
}

 

 

profile

하나씩 차근차근

@jeehwan_lee

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!