3.4.1 회원 서비스 클래스
회원 서비스는 repository 와 domain 을 활용하여,
실제 비즈니스 로직을 만든다.
회원 서비스 클래스를 만들어보자.
src > main > java 에 service 패키지를 만든다.
service 패키지에 MemberService 클래스를 만든다.
0) 회원 Repository 생성
먼저, 회원 서비스를 만들기 위한 ' 회원 repository ' 가 필요하다.
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
1) 회원가입 ( 중복 회원 검증)
같은 이름이 있는 회원은, 회원 가입이 불가한 비즈니스 로직을 추가하였다.
다음과 같이 validateDuplicateMember() 메소드를 사용하여 구현하였다.
private void validateDuplicateMember(Member member){
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
1) memberRepository 의 name 을 찾기 ( findByName)
2) ifPresent : name 의 값이 null 이 아니면 아래의 logic 이 동작함
( = 이미 존재하는 회원이 있는 경우)
: findByName 의 결과가 Optional 멤버이므로 , Optional 메소드 (ifPresent) 를 사용할 수 있다.
3) throw new IllegalStateException : name 이 있는 경우, 이미 존재한다고 표시함
public Long join(Member member) {
// 같은 이름의 중복 회원 X
validateDuplicateMember(member); // 중복 회원 검증
memberRepository.save(member);
return member.getId();
}
1) validateDuplicateMember : 회원 이름 중복 체크
2) 중복된 이름이 없으면, repository 에 save
3) id 값 반환하기
2) 전체 회원 조회 기능
public List<Member> findMembers(){
return memberRepository.findAll();
}
memberRepository 클래스에서 작성한 findAll() 메소드를 활용하여, 간단하게 구현 가능하다.
MemberService.java 전체 코드는 다음과 같다.
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
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("이미 존재하는 회원입니다.");
});
}
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
김영한 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 기반으로 작성하였습니다.
'SPRING 입문 [ 코드로 배우는 스프링 부트 ]' 카테고리의 다른 글
| [스프링 입문] 섹션 4.1 스프링 빈과 의존관계 (컴포넌트 스캔과 자동 의존관계 설정) (0) | 2023.01.10 |
|---|---|
| [스프링 입문] 섹션 3.5 회원 관리 예제 (회원 서비스 테스트) (1) | 2023.01.10 |
| [스프링 입문] 섹션 3.3 회원 관리 예제 (회원 리포지토리 테스트케이스 작성) (1) | 2023.01.09 |
| [스프링 입문] 섹션 3.2 회원 관리 예제 (회원 도메인과 리포지토리 만들기) (0) | 2023.01.09 |
| [스프링 입문] 섹션 3.1 회원 관리 예제 (비즈니스 요구사항 정리) (0) | 2023.01.09 |