[Spring] 스프링 입문 웹 개발 기초(12)
회원 서비스 개발
먼저 sevice 패키지를 만들어주고, MemberService를 만들어준다.
회원 서비스이므로 당연히 회원 리포지토리가 당연히 필요하다.
private final MemberRepository memberRepository = new MemoryMemberRepository();
다음으로 회원가입을 만들어본다.
회원가입은 단순하게 memberRepository에 save해주면 된다.
그리고 임의로 일단 member.getId를 통해 아이디를 반환해준다.
public Long join(Member member){
memberRepository.save(member);
return member.getId();
}
하지만 회원가입을 할 때 우리는 중복된 이름은 가입하지 못하게 한다는 조건이 있었다.
memberRepository.findByName(member.getName());
V
Ctrl + Alt + V
V
Optional<Member> result = memberRepository.findByName(member.getName());
이제 result에 담긴 이름이 null이 아닌 존재하는 값이 있다면 로직이 동작을 하는 ifPresent로 작업해준다.
원래 코드는 아래와 같다.
public Long join(Member member){
//같은 이름이 있는 중복 회원은 안된다.
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
}
하지만 Optional이 들어있는 것이 이쁘지 않다면 어쩌피 Optional로 반환될 것이고 result는 이미 반환되었으니 없애도 된다.
다시 말하자면 findByName의 결과는 어쩌피 Optional이니 바로 한다는 것이다.
public Long join(Member member){
//같은 이름이 있는 중복 회원은 안된다.
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
}
훨씬 깔끔해졌다. 하지만 이런식으로 findByName 아래로 로직이 쭉 나온다면 메서드를 뽑는것이 훨씬 좋다.
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
/**
* 회원 가입
*/
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("이미 존재하는 회원입니다.");
});
}
}
이렇게 변하게 된다. 훨씬 깔끔하고 이쁜 것 같다.
이제는 전체 회원 조회 기능을 만들어야 한다.
정말 쉽다. memberRepository에 findAll 기능을 써주고 findMembers 자체를 List
/**
* 전체 회원 조회
*/
public List<Member> findMembers(){
return memberRepository.findAll();
}
마지막으로 아이디를 찾는 기능을 만들어준다.
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
Leave a comment