BackEnd/JAVA

회원 도메인 만들기(1)

살찐만두 2022. 5. 4. 13:53
728x90
public interface MemberRepository {
 void save(Member member);
 Member findById(Long memberId);
}

* 회원 도메인 요구사항

  • 회원 가입하고 조회하기
  • 회원은 일반과 vip등급으로
  • 회원데이터는 자체 db를 구축할 수 있고 외부시스템과 연동할 수 있다(미확정)

*회원 클래스 다이어그램(정적)

이런식으로 개발 할 것이라는 틀이 만들어졌다.

*회원 객체 다이어그램(동적)

클라이언트 > 회원 서비스 > 메모리 회원 저장소 의 흐름으로 진행된다. 

 

본격적으로 회원 도메인을 만들어보자!!

public enum Grade {
 BASIC,
 VIP
}

회원 등급을 정해주고,

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

회원 엔티티도 만들어준다. get,set과 생성자를 함께 만들어준다.

 

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

가장 중요한 회원저장소 인터페이스까지 만들어준다!

이제 구현체인 MemoryMemberRepository를 만든다.

 

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

이렇게 간단하게 id를 찾고 가져올 수 있게 만들었다.

이제 서비스를 만들어보자

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

회원가입과 회원을 찾을 수 있는 서비스 인터페이스를 만든다. 

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

여기서 만들어준 구현객체를 선택해준다.

이렇게 하면 다형성에 의해서 MemberRepository 인터페이스가 아니라 MemoryMemberRepository의 save와 findMember를 호출한다.

 

MemberApp을 만들어서 작동하는지 확인할 수 있다.

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("find Member = " + findMember.getName());
     }
}

 

 

이렇게 만든 회원 도메인 설계의 문제점이 뭘까??

-> 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제가 있다.

실제 할당하는게 구현체를 의존하고 있다. 추상화와 구체화에 모두 의존! 안좋다!

 

728x90

'BackEnd > JAVA' 카테고리의 다른 글

주문과 할인 도메인(1)  (0) 2022.05.04
자바로 회원 도메인 만들기(0)  (1) 2022.05.04