[11강]

2023. 2. 2. 16:13Spring 강의/section3

회원 서비스 클래스를 만들어보자.

 

 

MemberService

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package hello.hellospring2.service;
 
import hello.hellospring2.domain.Member;
import hello.hellospring2.repository.MemberRepository;
import hello.hellospring2.repository.MemoryMemberRepository;
 
import java.util.Optional;
 
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 -> {throw new IllegalStateException("이미 존재하는 회원입니다.");});
 
       memberRepository.save(member);
       return member.getId();
    }
}
 
cs
ifPresent - 값이 있으면 실행하고 아니면 넘어감

findByName 해서 result에 값을 넣었는데 만약 찾아진 이름이 있다면 이미 가입한 회원이란 것이다.

 

Optional<Member> result이라는 코드가 있는데

Optional로 바로 반환하는 게 좋지 않다.

 

findByName은 Optional을 반환하기 때문에 Optional의 메소드를 바로 사용할 수 있다.

그러므로 ifPresent를 바로 사용 가능하다.

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

지금 보면 로직이 쭉 이어져있는데 이럴거면 메소드로 뽑아내는 게 낫다.

 

해당 코드를 드래그 하고 ctrl + shift + alt + t를 눌러주면 Refactor This가 뜨고 여기서 Extract Method를 선택하면

자동으로 밖으로 빼준다.

 

전체 서비스 코드

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
package hello.hellospring2.service;
 
import hello.hellospring2.domain.Member;
import hello.hellospring2.repository.MemberRepository;
import hello.hellospring2.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
 
       //ifPresent - 값이 있으면 실행하고 아니면 넘어감
       //findByName 해서 result에 값을 넣었는데 만약 찾아진 이름이 있다면 이미 가입한 회원이란것
        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);
    }
}
cs

'Spring 강의 > section3' 카테고리의 다른 글

[12강]  (0) 2023.02.02
[10강]  (0) 2023.02.02
[9강]  (0) 2023.01.30
[8강]  (0) 2023.01.30