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 |