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 |