☞Project/휘핑크림

[스프링부트] 개발 전 테스트 회원 서비스 개발 작성04

jju_developer 2023. 3. 23. 19:49
728x90

안녕하세요 jju_developer입니다.

 

이번시간에는 본격적으로 테스트 삼아 회원 서비스 개발에 대해서 보도록 하겠습니다.

회원정보는 지난 시간 링크를 통해서 꼭 참고 먼저 하시기 바랍니다!!!

지난 시간 1

지난 시간 2

1. java -> service -> MemberService

회원 서비스를 만들면 안에 회원 저장소가 있어야 합니다.

 

그래서 회원 서비스 안에 회원저장소를 private로 만들고

회원 가입 서비스부터 만들도록 하겠습니다.

private final MemberRepository memberRepository = new MemoryMemberRepository();

가입을 하면 임의로 아이디만 반환하도록 지정하였습니다.
같은 이름은 가입을 할 수 없도록 만들기... 왜냐면 회원 아이디는 우리가 지정해 주는 아이디기 때문

여기서 회원 저장소에서 findByName으로 값을 찾아봅니다(회원에서 이름을 찾아 옴)

이것을 result에 담고, 만약 이 결과가 ifPresent 값이 있으면

m(회원)이 존재하면 IllegalStateException ("이미 존재하는 회원입니다.")가 반환되도록

만들기!!

//회원가입
public Long join(Member member){
    memberRepository.findByName(member.getName())
        .ifPresent(m->{
            throw new IllegalStateException("이미 존재하는 회원입니다.");
         });
         
    memberRepository.save(member);
        return member.getId();

-> 조인 메서드

회원가입 메서드에 존재하는 것은 이미 존재하는 회원인지 확인하고

그게 아니라면 회원 저장소에 회원을 저장하고 회원의 아이디를 반환해 주었습니다.

 

여기서

memberRepository.findByName(member.getName())
    .ifPresent(m->{
        throw new IllegalStateException("이미 존재하는 회원입니다.");
     });

이 부분만 보면 로직이 쭉 나오는 경우에는 메서드로 뽑는 게 좋습니다.

맥에서 컨트롤+T를 누르면 (커맨드 옵션 M)

Extract Method

이거를 눌러서 따로 빼주었습니다.

 

그다음에 회원조회 기능도 만들었습니다.

 

전체 코드는 아래와 같습니다.

package org.project.whipping.service;

import org.project.whipping.domain.Member;
import org.project.whipping.repository.MemberRepository;
import org.project.whipping.repository.MemoryMemberRepository;

import java.util.List;
import java.util.Optional;

public class MemberService {
    //회원 저장소 먼저 불러오기
    private final MemberRepository memberRepository = new MemoryMemberRepository();

    //회원가입
    public Long join(Member member){
        validateDuplicateMember(member);
        memberRepository.save(member);
        return member.getId();
    }

    //중복 회원 검증
    private void validateDuplicateMember(Member member) {
        memberRepository.findByName(member.getName())
            .ifPresent(m->{
                throw new IllegalStateException("이미 존재하는 회원입니다.");
             });
    }

    //전체 회원 조회
    public List<Member> findMembers(){
        return memberRepository.findAll();
    }

    public Optional<Member> findOne(Long memberId){
        return memberRepository.findByID(memberId);
    }


}
        /* 옵셔널을 바로 반환하는것은 좋지 않다.s
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m->{
            throw new IllegalStateException("이미 존재하는 회원입니다.")
        });
        */

다음 시간에는 회원 서비스 클래스의 코드가 실행되는지에 대해

테스트를 해보도록 하겠습니다~!!

 

고생하셨습니다.

728x90