인프런 스프링 입문(10)

🦥 회원서비스 개발

service 라는 패키지를 하나 만들고 그 안에 MemberService.java 파일을 만들어줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.spring_study.d03_16.service;

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

import com.spring_study.d03_16.domain.Member;
import com.spring_study.d03_16.repository.MemberRepository;
import com.spring_study.d03_16.repository.MemoryMemberRepository;

public class MemberService {
    
    private final MemberRepository memberRepository = new MemoryMemberRepository();


    /**
     * 회원가입
     */
    public Long join(Member member){
        //같은 이름의 중복 회원X
        /* 
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m -> { //null 이 아니라 어떤 값이 있으면 밑에 throw 로직이 실행된다. --> 옵셔널로 바로반환하는 것은 좋지않다.
            throw new IllegalStateException("이미 존하는 데이터")
        });
        */
        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);
    }
}

다른것은 거진 다 알겠지만 한문장을 공부해야할 것같다. 추가로 옵셔널로 반환하면 좋지 않은점도 찾아봐야 할것같다.

1
2
3
4
5
6
private void validateDuplicateMember(Member member) {
        memberRepository.findByName(member.getName())
                        .ifPresent(m -> {
                            throw new IllegalStateException("이미 존재하는 데이터");
                        }); 
}
상세 코드 공부

isPresent 란

-Boolean 타입
-Optional 객체가 값을 가지고 있다면 true,값이 없다면 false


ifPresent 란

-void 타입
-ifPresent()는 Optional 객체가 값을 가지고 있으면 실행 값이 넘어간다


ifPresentOrElse() 란

-void 타입
Optional 객체 내부의 값이 존재할 경우 특정 동작(Consumer)을 수행하고, 값이 없을 경우 다른 동작(Runnable)을 수행하는 메서드

IllegalStateException 표준 예외는 의외로 종류가 많아서 다른 포스트로 작성하겠다.

Leave a comment