Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[스프링 부트] 12. 회원 서비스 개발 본문

인프런 김영한님 강의/1 . 스프링 부트 입문

[스프링 부트] 12. 회원 서비스 개발

이대곤 2022. 6. 26. 22:17

* 서비스 코드 작성시 메소드의 이름을 비지니스에서 가져온 용어들로 사용해야 하는 이유

service 패키지 내의 MemberService 클래스 내부의 메소드를 구현할 때, 비지니스에서 가져온 용어들로 사용하였다.

이는 이전에 repository 패키지 내의 클래스 내부의 메소드 이름을 지정한 것과 다른 점인데, 이래야 기획자들하고의 의사소통이 원활하기 때문이다. 예를들면, 기획자가 회원가입쪽이 이상해요 하면 join 메서드 쪽을 살펴봐야 하는구나 하고
바로 매칭이 되어 편리해진다.

1. java/hello.hellospring 아래에 service 패키지 생성

2. 위 패키지 내에 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){
        //같은 이름이 있는 중복 회원이 있다면 예외를 발생시킴

        // 직관적인 코드
//        Optional<Member> result = memberRepository.findByName(member.getName());
//        result.ifPresent(m -> { // ifPresent : 만약 값이 있다면 즉, null이 아니라면 실행부를 실행하라.
//            throw new IllegalStateException("이미 존재하는 회원입니다.");
//        });

        //위 코드를 간소화 시킨것
//        memberRepository.findByName(member.getName())
//                .ifPresent(m -> {
//                    throw new IllegalStateException("이미 존재하는 회원입니다.");
//                });

        //바로 위 코드를 드래그 해서 Alt + Enter를 눌러 extract method 하여 생성한 메소드
        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();
    }

    /*
     * 1개 회원 조회
     * */
    public Optional<Member> findOne(Long memberId){
        return memberRepository.findById(memberId);
    }
}

 

Comments