본문 바로가기
Java | Spring/Spring 입문

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

by 동기 2021. 10. 26.
반응형

순서

 


3.4 회원 서비스 개발

회원 리포지토리와 도메인을 이용해 비즈니스 로직을 작성하는 회원 서비스 클래스를 만들자

 

Service 패키지 추가 후 MemberService Class 생성

 

join(가입) 메소드 작성

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * join
     */
    public Long join(Member member){
        //dont dupl name
        // memberRepository.findByName(member.getName()); ctrl + alt + v  : auto gen
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m->{
            throw new IllegalStateException("exist member");
        });

        memberRepository.save(member);
        return member.getId();
    }
}

🦊 ctrl + alt + v : 인스턴스화 자동 완성

과거에는 값을 꺼내 if , null 로 비교했다면 지금은 null일 가능성이 있을 경우 Optional로 한번 감싸준다.

Optional 의 다양한 메소드를 이용할 수 있다. ifPresent ( 값이 있다면 실행 )

 

위 코드에서도 Optional로 반환하는것이 안이쁘다고 한다.  다음과 같이 변경 할 수 있다.

    /*
        Optional<Member> result = memberRepository.findByName(member.getName());
        //if value is not null
        result.ifPresent(m->{
            throw new IllegalStateException("exist member");
        });
*/
        memberRepository.findByName(member.getName())
                .ifPresent(member1 -> {
                    throw new IllegalStateException("exist member");
                });
        memberRepository.save(member);
        return member.getId();

🦊 ctrl + alt + m : 메소드로 추출

 

📌repository의 경우, findby, save 등 단순하게 저장소에 데이터를 처리 하는 느낌이라면, Service Class는 비즈니스 로직에 가깝게 구성되어있고, method name도 그에 맞게 짜는것이 좋다.

 

다른 메소드 들도 추가 작성

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * join
     */
    public Long join(Member member){
        //dont dupl name
        // memberRepository.findByName(member.getName()); ctrl + alt + v  : auto gen
    /*
        Optional<Member> result = memberRepository.findByName(member.getName());
        //if value is not null
        result.ifPresent(m->{
            throw new IllegalStateException("exist member");
        });
*/
        validateDuplicateMember(member);
        memberRepository.save(member);
        return member.getId();
    }

    private void validateDuplicateMember(Member member) {
        memberRepository.findByName(member.getName())
                .ifPresent(member1 -> {
                    throw new IllegalStateException("exist member");
                });
    }

    /**
     * find all members
     */
    public List<Member> findMembers(){
        return memberRepository.findAll();
    }


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

 

다음으로 잘 작성되었는지 검증해야하는데, 여러가지 방법 ( main method 방법, controller 방법 등) 중 Test 코드에 작성하여 검증을 해 보자

반응형

댓글