본 게시물은 인프런 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 듣고 개인 공부용으로 작성하였습니다.
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 {
//final은 값을 생성자에서 초기화한 이후 변경 불가능
private final MemberRepository memberRepository;
{
MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository();
memberRepository = 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->{ //null이 아니라 값이 있다면 반환
throw new IllegalStateException("already existed");
});
}
//전체 회원 조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
Optional덕분에 ifPresent를 쓸수 있다.
Optional을 바로 반환해주는건 좋지 않기 때문에
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m->{ //null이 아니라 값이 있다면 반환
throw new IllegalStateException("already existed");
});
이렇게 사용하지 않고 첫번째처럼 ifPresent를 바로 사용한다. 또한 extract method를 해서 valid~함수로 따로 뽑아준다.
클래스나 함수 이름을 정할때 서비스는 비지니스에 의존적으로 설계하고(join), 리포지토리는 개발스럽게(findAll) 용어 선택한다.
Ctrl + Alt+ V : extract variable
Ctrl + Alt + Shift + T : Refactor this
Ctrl + Alt + M : Extract Method