[SpringBoot] #11 - 회원 서비스 개발

728x90

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

1. service 만들기 

 

- 회원 서비스를 만들려면 회원 Repository가 필요하다.

 

2. 회원가입 메서드 만들기 

public class MemberService {

private final MemberRepository memberRepository = new MemoryMemberRepository();

    /* 회원가입 */
    public Ling join(Member member){
        // 중복 회원이 있는지 확인
        memberRepository.findbyName(member.getName());
        memberRepository.save(member);
        return member.getid();

    }

 

memberRepository.findbyName(member.getName());  에서 Ctrl + alt + V 하면 자동으로 

Optional member1 = memberRepository.findbyName(member.getName()); 로 바뀐다.

 

- 중복 회원 확인 

        // 중복 회원이 있는지 확인
        Optional<Member> member1 = memberRepository.findbyName(member.getName());

        result.ifPressent(m -> {
            throw  new IllegalStateException("이미 존재하는 회원입니다.")
        })

- 이전에는 if(null)과 같은 형태를 사용 했었으나, 지금은 null을 이미 한번 감싸서 나오기 때문에 ifPressent과 같은 형태를 사용 할 수 있다. 

 

그냥 꺼내고 싶다면 Member member1 = result.get(); 와 같은 형태로 꺼낼 수도 있다. 하지만 직접 바로 꺼내는 것을 권장하지 않으며 사용 하는 경우 result.orElseGet() 을 사용 (값이 있으면 꺼내고 없으면 메서드 실행)

Optional을 바로 반환할 때 이미 result 가 반환 되었기 때문에 아래와 같이 바로 ifPresent가 들어갈 수 있다.

 

        // 중복 회원이 있는지 확인
        memberRepository.findbyName(member.getName()).ifPresent(m -> {
            throw  new IllegalStateException("이미 존재하는 회원입니다.");
        });

 

 

- 소스 리팩토링(Refactoring) 하는 법 

findbyName과 같이 로직이 바로 나오는 경우 메서드로 뽑는 것이 좋다.

Window 단축키 : Ctrl+Alt+Shift+T

 

메서드로 추출할 행을 전부 선택 해야 한다.

 

    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("이미 존재하는 회원입니다.");
        });
    }

 

 

3. 전체회원 출력 메서드

    public List<Member> findMembers(){
        return memberRepository.findAll();
    }

 

4. 아이디 찾기

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