반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
11-07 11:40
관리 메뉴

ImJay

[Java Spring] 1-11. 회원 서비스 개발 본문

Java Spring/스프링 입문

[Java Spring] 1-11. 회원 서비스 개발

ImJay 2023. 1. 30. 13:05
반응형

[Java Spring] 1-11. 회원 서비스 개발


1. 회원 리포지토리와 도메인을 활용해서 비즈니스 로직인 회원 서비스 클래스를 개발해보자.

 

2. src > main > java > hello.hellospring > 새로 만들기 > 패키지

3. service 패키지 생성

 

4. service 패키지 내에 MemberService 클래스 생성

 

5. 코드 작성

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;

import java.util.Optional;

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * 회원 가입
     */
    public Long join(Member member) {
        // 같은 이름이 있는 중복회원X
        memberRepository.findByName(member.getName())
                .ifPresent(m -> {
                    throw new IllegalStateException("이미 존재하는 회원입니다.");
                });

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

- memberRepository.findByName 의 반환형은 Optional 이다. 그러나 Optional 을 객체로 생성하는 것은 권장되지 않기 때문에, 직접 메소드를 호출해주었다.

- ifPresent 는 findByName의 반환이 Null 이 아닌 값으로 존재한다면, 다음의 명령을 수행한다. 기존에 Optional 자료형이 존재하지 않을 때는 Null 값이 존재하는지로 판별하였다. 그러나 값을 직접 참조하는 것은 적절하지 못하다. ifPresent 메소드는 Optional 이기 때문에 사용이 가능한 메소드이다.

 

6. 간단하게 메소드로 뽑아내는 방법

위처럼 복잡한 로직은 메소드로 뽑아내는 것이 적절하다.

6-1. 드래그 후 Ctrl + Alt + Shift + T 를 누른다. (앞으로 매우 자주 사용하니 꼭 숙지)

6-2. 메서드 추출을 클릭한다.

6-3. 메서드 이름을 validateDuplicateMember 로 설정한다.

 

7. 코드 추가 작성

    /**
     * 전체 회원 조회
     */
    public List<Member> findMembers() {
        return memberRepository.findAll();
    }

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

- 서비스 클래스는 비즈니스에 가까운 용어(네이밍)를 사용해야한다.

반응형
Comments