회원 관리에 필요한 멤버 저장소를 만들었다면 이번엔 작동할 수 있는 회원 서비스 처리를 작성한다.
service
패키지를 만들고 그 안에 MemberService
클래스를 생성한다.
private final MemberRepository memberRepository = new MemoryMemberRepository();
리포지토리 불러오기
//회원가입
public Long join(Member member){
//같은 이름이 있는 중복 회원은 거부
//command+option+v 단축키로 옵셔널 변환해줌..
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
중복 이름은 회원가입이 불가능하다는 전제로 이미 존재하는 이름이 있을 경우엔 이미 존재하는 회원입니다.
메세지를 출력한다.
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
지금의 내가 봤을 땐 Optional
이 붙어있어도 충분히 멋있어보이는데 강의에서는 Optional
을 생략하고 코드를 좀 더 깔끔하게 다듬는다.
덕분에 나에겐 약간의 어려움이 더해졌다.
그리고 이렇게 정리가 중복이름 검증용 코드를 메소드로 묶어서 한번 더 코드 정리를...!!
코드 블럭 메소드로 만들기
- 코드 묶어서 드래그 후
control
+T
누른 뒤 Extract Method 선택
- 메소드 이름 지정을 위해 More options에서 이름을 설정해준다.
- 강의 따라서 똑같이
validateDuplicateMember
로 메소드 이름을 바꿔주었다.
//회원가입
public Long join(Member member){
//같은 이름이 있는 중복 회원은 거부
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);
}
전체 회원 목록을 조회하는 메소드도 작성한다.
2023.05.28 작성