Spring-회원 서비스

snowball moon·2023년 10월 3일
0

Spring-입문

목록 보기
11/14

회원 서비스 클래스

회원 서비스는 회원 repository와 domain을 활용하여 실제 비즈니스 로직을 작성한다.

먼저 service package를 생성한 후 MemberService class를 만들어준다.

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();
    //회원가입

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

    }
}

memberRepository에 save를 호출 해주면 된다.
회원가입 로직 중에 같은 이름의 중복 회원은 안된다는 것이 있었기 때문에 중복 회원을 막는 코드를 추가한다.

Optional<Member> result = memberRepository.findByName(member.getName());

(Ctrl+Alt+v 단축키를 사용하면 생성자 선언을 자동으로 해준다.)
먼저 repository에서 findByName으로 찾아본다.

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

null이 아니라 값이 있으면 로직이 동작한다.
Optional로 감싸주면 여러 메서드를 사용할 수 있게 되는데 위에서는 ifPresent를 사용하였다.
(바로 꺼내고 싶을 때는 get을 사용한다. orElseGet은 값이 있을 때는 꺼내고 없으면 다다른 걸 실행하도록 해준다.)

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

                });

Optional을 바로 반환하는 것은 별로 좋지 않기 때문에 코드를 정리해준다.
result가 반환이 되었기 때문에 바로 ifPresent를 쓸 수 있다.
(위와 같은 경우는 메서드로 뽑는 것이 좋다.
Ctrl+Alt+m 단축키를 사용하자)

    public Long join(Member member) {
        //같은 이름을 가진 중복 회원X
        validateDuplicateMember(member);//중복 회원 검증
        memberRepository.save(member);
        return member.getId();

    }

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

                });
    }

중복회원을 검증하고 통과하면 저장한다.
(service class는 비즈니스적인 용어를 사용해서 만들어준다. 역할에 맞게 네이밍을 하자)

//전체회원 조회

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

    }

전체 회원을 조회할 수 있는 기능도 만들어준다.

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

    }

Id를 조회했을 때 memberId를 반환한다.

References

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8
단축키
https://drsggg.tistory.com/m/608

0개의 댓글