- 비즈니스 요구사항
- 회원 도메인과 리포지토리 만들기
- 회원 리포지토리 테스트 케이스 작성**
- 회원 서비스 개발
- 회원 서비스
서비스 :
회원 리포지토리와 도메인을 활용해 실제 비즈니스 로직을 작성
파일 구조
public Long join(Member member){
validateDuplicateMember(member); // 중복 회원 검증 : 같은 이름이 있는 중복 회원X
memberRepository.save(member);
return member.getId();
}
비즈니스 로직 구성 당시 중복 회원은 받지 않겠다는 설정 있었음
그래서 validateDuplicateMember라는 메소드를 통해 중복회원을 검열
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName()) //Optional로 반환
.ifPresent(m -> { //여기에 값이 있으면 동작
throw new IllegalStateException("이미 존재하는 회원입니다");
});
}
기존 방식에서는 if문을 통해 !null 이렇게 처리를 함
하지만 Optional로 객체를 한번 감싸서 반환하기 때문에
ifPresent 사용 가능
ifPresent : 해당 값이 있으면 아래 메소드가 동작하도록 함
orElseGet도 자주 사용함 > 값이 있으면 꺼내오고 없으면 아래 메소드를 실행해라
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
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){
validateDuplicateMember(member); // 중복 회원 검증 : 같은 이름이 있는 중복 회원X
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName()) //Optional로 반환
.ifPresent(m -> { //여기에 값이 있으면 동작
throw new IllegalStateException("이미 존재하는 회원입니다");
});
// orElseGet도 자주씀 = 값이 있으면 꺼내고 없으면 어떤 메소드를 실행해
// 기존에는 if !null이면 이런식으로 갔다면
// Optional이라는 이름으로 객체를 한번 감싸서 반환
// 감싼 덕분에 Optional안의 ifPresent것을 사용할 수 있음
// ctrl+t 리팩토링 관련 여러 기능들 단축키
}
// 전체 회원 조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
// 아이디로 회원 조회
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}