반응형
이제 서비스를 만들겠습니다. service/MemberService.java를 생성합니다.
memberRepository클래스와 다르게 service 클래스는 비즈니스에 가까운 용어를 사용해야 합니다(비즈니스를 처리해야 되기 때문에). 보시면 join(), findMembers()와 같은 용어를 사용합니다. memberRepository는 save, findById 등 단순하게 넣었다 뺐다 와 같은 용어를 사용합니다.
회원 가입하기
// MemberService.java public class MemberService { // service를 만들기 위해서는 repository가 있어야 합니다. private final MemberRepository memberRepository = new MemoryMemberRepository(); // 회원 가입 public long join(Member member) { // 같은 이름 있으면 회원가입이 안되게 하기 -> 프로젝트 조건 Optional<Member> result = memberRepository.findByName(member.getName()); result.ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); } ); // ifPresent -> null이 아니라 어떤 값이 있으면 // 혹시나 null 일 수 있으면 Optional로 감싸서 반환해준다. // 추가적으로 result.orElseGet(값이 있으면 꺼내고 없으면 여기 있는 메소드 실행)를 많이 사용한다. // 회원 가입 시 아이디를 반환시켜 준다. memberRepository.save(member); return member.getId(); } }
Optional을 바로 반환 시키는 것을 권장하지 않습니다.
Optional<Member> result = memberRepository.findByName(member.getName()); result.ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); } ); memberRepository.save(member); return member.getId();
저 구문을 변경시킵니다.
memberRepository.findByName(member.getName()) // result가 반환되었기 때문에 바로 ifPresent를 사용할 수 있습니다. .ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); memberRepository.save(member); return member.getId();
코드를 잘 보시면 findByName이라고 해서 로직이 쭉 나옵니다. 이런 경우에는 메서드로 뽑는 게 좋습니다.
단축키 ctrl + T (리팩터링 단축키) 여기서 메서드 추출 (command + option + M)을 자주 사용하게 됩니다.
이름을 validateDuplicateMember로 만들었습니다.
// 회원 가입 public long join(Member member) { validateDuplicateMember(member); // 중복 회원 검증 memberRepository.save(member); return member.getId(); } private void validateDuplicateMember(Member member) { memberRepository.findByName(member.getName()) // result가 반환되었기 때문에 바로 ifPresent를 사용할 수 있습니다. .ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); }
저렇게 만드시면 '중복 회원을 검증하고 통과하면 바로 저장하는구나'라고 바로 이해할 수 있습니다.
회원 조회하기
전체 회원 조회하기
... public List<Member> findMembers() { return memberRepository.findAll(); } ...
회원 한명만 조회하기
public Optional<Member> findOne(Long memberId) { return memberRepository.findById(memberId); }
반응형
'programming > SpringBoot' 카테고리의 다른 글
다공) 1장,2장 Project 생성 및 Git 연동 / Hello찍어보고 롬복으로 전환하기 (0) | 2022.08.02 |
---|---|
다시 공부) 스프링부트와 AWS로 혼자 구현하는 웹서비스 (0) | 2022.08.01 |
[spring] 테스트 코드 (0) | 2022.06.27 |
[Spring] 스프링 입문강의 3 (회원 관리 예제) (0) | 2022.06.25 |
[Spring] 스프링 입문 강의 2 (콘텐츠의 종류 - 정적 콘텐츠, MVC, API) (0) | 2022.06.24 |