Spring/Spring Core Basic

회원 도메인 개발

JWonK 2022. 1. 21. 16:49
728x90
반응형

회원 도메인 개발은

위 그림에 맞춰 역할과 구현을 나눠 개발할 것이다.

 

 

 

가장 첫 번째로, 회원 도메인을 개발할 것이므로 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에 대한 구현체 코드 작성

을 만든 것이다. 

 

이제 테스트 과정을 통해 만든 코드들이 잘 동작하는지 확인해야한다.

728x90
반응형

'Spring > Spring Core Basic' 카테고리의 다른 글

주문과 할인 도메인 설계  (0) 2022.01.25
회원 도메인 실행과 테스트  (0) 2022.01.21
비즈니스 요구사항과 설계  (0) 2022.01.21
자바 프로젝트 생성  (0) 2022.01.21
좋은 객체 지향 프로그래밍  (0) 2022.01.21