본문 바로가기
Framework/Spring

회원 서비스 개발

by 파2RI 2024. 1. 9.

src>main>java>hello.hellospring

>service패키지>MemberService클래스

 

 

전체 코드:

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;

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

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * 회원 가입
     */
    public Long join(Member member){
        //같은 이름이 있는 중복 회원X

        // ctrl+alt+m
        ValidateDuplicateMember(member);

        // 이 값이 존재하면 Exception 동작
        // Optional 통해 가능(null의 가능성이 있으면 꼭 한 번 감싸주자.)

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

}

 

 

 

1. join() 메서드

/*
      ** 회원 가입
        */
    public Long join(Member member){
        //같은 이름이 있는 중복 회원X

        // ctrl+alt+v
        Optional<Member> result = memberRepository.findByName(member.getName());

        // 이 값이 존재하면 Exception 동작
        // Optional 통해 가능(null의 가능성이 있으면 꼭 한 번 감싸주자.)
        result.ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 회원입니다.");
        });
        memberRepository.save(member);
        return member.getId();

    }

 

join 메서드는 Member 객체를 받아서

memRep에 save해준다.

 

이때 ctrl + alt + v를 해주면 객체가 자동으로 생성된다.

 

이때 같은 이름의 Member가 있을 시 (result 값이 ifPresent일 경우)

IllegalStateException

 

이 동작하게 한다.

 

그 부분은 Optional을 통해 가능한데, null 가능성이 있는 경우는 꼭 Optional로 감싸주자.

 

 

예외처리 부분은 아래와 같이 정리할 수 있다.

 

//같은 이름이 있는 중복 회원X

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

        // 이 값이 존재하면 Exception 동작

 

 

 

중복 회원을 예외처리하는 이 부분은 로직이 존재하므로 메서드를 뽑아주는 것이 좋다.

 

 

해당 부분을 모두 선택하고

ctrl + alt + m 단축키를 누르면 Extract Method를 할 수 있다.

 

그러면 아래와 같이 코드에 메서드가 추가된다.

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;

import java.util.Optional;

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /*
      ** 회원 가입
        */
    public Long join(Member member){
        //같은 이름이 있는 중복 회원X

        // ctrl+alt+m
        ValidateDuplicateMember(member);

        // 이 값이 존재하면 Exception 동작
        // Optional 통해 가능(null의 가능성이 있으면 꼭 한 번 감싸주자.)

        memberRepository.save(member);
        return member.getId();

    }

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

 

 

2. findMembers(), findOne() 메서드

 

/**
     * 전체 회원 조회
     */

    public List<Member> findMembers(){
        return memberRepository.findAll();
    }
    
    public Optional<Member> findOne(Long memberId){
        return memberRepository.findById(memberId);
    }

 

findMembers는 전체 회원 정보를 받는 메서드인데,

List로 memRep에 있는 모든 값을 return 해주면 된다.

 

findOne은 memberId에 해당되는 회원 정보를 받는다.

findById로 그 id에 해당되는 Member 정보를 return한다.

'Framework > Spring' 카테고리의 다른 글

컴포넌트 스캔, 자동 의존관계  (0) 2024.01.12
회원 서비스 테스트  (0) 2024.01.09
회원 리포지토리 테스트 케이스 작성  (0) 2024.01.09
회원 도메인, 리포지토리 만들기  (0) 2024.01.09
API  (0) 2024.01.09