회원 도메인 개발은
위 그림에 맞춰 역할과 구현을 나눠 개발할 것이다.
가장 첫 번째로, 회원 도메인을 개발할 것이므로 member라는 패키지를 생성해주자
그리고 그 안에 회원의 등급을 나눠줄 enum을 생성해준다 < Grade >라는 이름으로 생성하였다.
package spring.core.member;
public enum Grade {
BASIC,
VIP
}
그리고 회원 정보와 관련된 Member라는 클래스를 하나 생성해주고 그 안에는 id와 name, grade 정보를 선언해준다.
기본적으로 선언한 3개 파라미터에 대한 생성자와 getter/setter를 만들어준다
(윈도우의 경우 단축키 Alt + insert)
package spring.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;
}
}
이제 회원을 저장하는 repository를 만들건데 전 게시글에서 보았듯이 어떤 방식으로 저장할지 아직 정해진 게 없다.
따라서 interface를 이용하여 먼저 역할을 구현해준 뒤 필요한 구현체를 만들어둔다.
MemberRepository interface에는
① 회원을 저장하는 메서드
② id로 회원을 검색하는 메서드를 선언해준다.
// MemberRepository Interface
package spring.core.member;
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
위에서 만든 interface에 대한 첫번째 구현체는 프로젝트 내 메모리를 이용하여 구현한 코드이다.
interface에 대한 구현체를 만드는 것이기 때문에 implements를 이용하여 method를 오버라이딩해준다.
// MemberRepository에 대한 첫 번째 구현체
package spring.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);
}
}
(HashMap을 사용하면 동시성 문제가 발생할 수 있지만 간단한 예제를 진행하는 것이기에 그냥 진행, 동시성 문제를 해결하기 위할 때는 ConcurrentHashMap을 사용하는 것을 권장)
위 과정을 통해
1. 간단한 회원정보
2. MemberRepository라는 인터페이스(역할)을 구현한 뒤 -> MemoryMemberRepository 구현체를 생성해주었다.
이제 간단한 회원 서비스 interface를 구현해보면
① 회원가입 메서드
② 회원조회 메서드를 선언해준다.
// MemberService Interface
package spring.core.member;
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
그리고 구현체를 MemberServiceImpl이라는 이름으로 생성해준다.
package spring.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를 저장소로 사용하는 MemberServiceImpl코드이다.
총 정리해보자면,
회원 도메인 개발에서
ⓐ 회원 정보에 대한 클래스 생성
ⓑ 회원 정보를 저장하기 위한 저장소를 구현해야하는데 어떤 방식으로 할 지 아직 정해진 게 없기 때문에 필요한 기능만 선언함으로써 인터페이스 구현
ⓒ 메모리에 회원 정보를 저장하는 MemoryMemberRepository 구현체 구현
ⓓ 위에서 만들었던 회원, 저장소를 이용하여 할 수 있는 간단한 서비스에 대한 인터페이스 제작
ⓔ MemberService에 대한 구현체 코드 작성
을 만든 것이다.
이제 테스트 과정을 통해 만든 코드들이 잘 동작하는지 확인해야한다.
'Spring > Spring Core Basic' 카테고리의 다른 글
주문과 할인 도메인 설계 (0) | 2022.01.25 |
---|---|
회원 도메인 실행과 테스트 (0) | 2022.01.21 |
비즈니스 요구사항과 설계 (0) | 2022.01.21 |
자바 프로젝트 생성 (0) | 2022.01.21 |
좋은 객체 지향 프로그래밍 (0) | 2022.01.21 |