개발/Spring

[Spring] 스프링 입문 - 회원 서비스 개발

y_lime 2024. 11. 7. 16:46

Service

: 서비스는 비즈니스 처리를 하는 롤 (네이밍도 이에 맞게 해야 함)

 

MemberService 클래스 생성

1. 회원 가입

public class MemberService {
    private  final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * 회원 가입
     */
    public Long join(Member member){
      
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m -> {
            throw  new IllegalStateException("이미 존재하는 회원입니다.");
        });
        memberRepository.save(member);
        return member.getId();
    }

}

null 이 반환될 수 있으니 optional로 감싸준다. 

BUT !! optional을 쓰는 건 비추 ! !

→ 아래와 같이 변경해준다.

public Long join(Member member) {
    memberRepository.findByName(member.getName())
            .ifPresent(m -> {
                throw new IllegalStateException("이미 존재하는 회원입니다.");
            });
    memberRepository.save(member);
    return member.getId();
}

 

검증 하는 부분 따로 Method로 추출하기

단축키 : control + T 입력 후 "메서드 추출" 선택

memberRepository.findByName(member.getName())
        .ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 회원입니다.");
        });

를 감싼 후 단축키 입력 하여 설정 완료 후 리팩토링 진행

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("이미 존재하는 회원입니다.");
            });
}

 

2. 전체 회원 조회

public List<Member> findMembers(){
    return memberRepository.findAll();
}

public Optional<Member> findOne(Long memberId){
    return memberRepository.findById(memberId);
}

 

 

 


@참고자료

[인프런] 김영한 - 스프링 입문 강의 (무료)