Spring boot 회원서비스 개발

·2021년 11월 8일
0

SpringBoot

목록 보기
5/5

본 게시물은 인프런 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 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

profile
중요한 건 꺾여도 다시 일어서는 마음

0개의 댓글