이번 시간에는 회원 서비스 클래스를 만들어보자
서비스는 핵심 비즈니스 로직 구현하는 부분으로 회원가입 시 이름에 대해서 중복 가입이 안되도록 구현할 예정이다.
관련하여 웹 어플리케이션 계층 구조 에 대해서 잠깐 복습하도록 하자 !
[Spring Boot] 회원관리 예제 - 비즈니스 요구 사항 정리 ①
오늘부터 드디어! 본격적인 실습을 통해 간단한 회원관리 개발을 진행해보자 아래 5개의 단계에 걸쳐서 진행 할 예정이다. 비즈니스 요구 사항 정리 회원 도메인과 리포지토리 만들기 - 회원 도
jnaa.tistory.com
📚 MemberService 클래스 만들기
먼저 java package에 service package를 만든다.
그리고 service 패키지에 MemberService 클래스를 생성한다.
회원 서비스 자체가 회원 리포지트리를 활용하는 것이기 때문에
MemberService 클래스에 MemoryMemberRepository 객체를 선언한다.
private final MemberRepository memberRepository = new MemoryMemberRepository();
📚 회원 가입 기능 (Join) 만들기
회원 가입은 Member 객체를 Repository에 저장하는 기능으로
memberRepository의 save를 호출하고 회원가입을 하면 repository에 멤버 정보를 저장하고 id를 반환하도록 작성한다.
public Long join(Member member){
memberRepository.save(member);
return member.getId();
}
❗ 여기서 "같은 이름이 있는 회원은 가입 불가" 라는 항목이 있었기에 Optrional를 이용해서 코드를 작성하면된다.
그렇다면 어떻게 하면 좋을까 ?
1. parameter로 받은 member 객체의 이름(name)을 가진 객체를 Optional로 받는다.
2-1. Optional 안에 들어있는 값이 null이 아니라면, 해당 이름을 가진 객체가 있다는 뜻으로 가입 불가다.
2-2. Optional 안에 들어있는 값이 null이라면, 해당 이름을 가진 객체가 없다는 뜻으로 가입이 가능하다.
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
먼저 memberRepository에서 findByName을 통해
member의 이름(member.getName())에 해당하는 객체를 받아서 변수 result에 담는다.
result는 Optional 객체이기 때문에, Optional에서 제공하는 메서드를 사용할 수 있다.
ifPresent()를 이용해서 Optional 객체에 값이 있다면(null이 아니라면), 뒤의 로직을 실행하는 함수이다.
따라서 result에 같은 이름인 회원이 존재한다면, throw new IllegalStateException을 던질 것이다.
여기서 리팩토링을 하자면 아래와 같이 정리해서 코드를 쓸 수 있다.
memberRepository.findyByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
전체 코드는 아래와 같다 !
package hello.helloSpring.service;
import hello.helloSpring.controller.domain.Member;
import hello.helloSpring.repository.MemberRepository;
import hello.helloSpring.repository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class memberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
/*회원 가입 */
public Long join(Member member){
// 같은 이름이 있는 중복 회원 x
extracted(member);
memberRepository.save(member);
return member.getId();
}
private void extracted(Member member) {
memberRepository.findyByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
/*전체 회원 조회*/
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
회원가입 코드를 작성했다면 전체 회원 조회하는 기능도 만들어보자
📚 전체 회원 조회 (findMembers) 만들기
// 전체 회원 조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
전체 회원 조회하는 메서드는 MemoryMemberRepository에 만든 findAll를 이용해서 반환해주도록 하자.
또한 회원 한명을 조회하는 기능도 같이 만들자
📚 회원 한명 조회 (findOne) 만들기
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
멤버의 Id를 전달 받으면, 해당 Id를 갖고 있는 객체를 받아서 반환하면 될 것이다.
여기서 계속 나오는 Optional 에 대해서는 내일 포스팅 해보자!
역시 새로운게 너무 많아 어렵지만 재미있는 세계다...😥
'ON > 실습' 카테고리의 다른 글
[Spring Boot] 스프링 빈과 의존관계 - 컴포넌트 스캔과 자동 의존관계 설정 ① (0) | 2023.11.20 |
---|---|
[Spring Boot] 회원관리 예제 - 회원 서비스 테스트 ⑤ (0) | 2023.11.17 |
[Spring Boot] 회원관리 예제 - 회원 리포지토리 테스트 케이스 작성③ (0) | 2023.11.09 |
[Spring Boot] 회원관리 예제 - 회원 도메인과 리포지토리 만들기 ② (2) | 2023.11.08 |
[Spring Boot] 회원관리 예제 - 비즈니스 요구 사항 정리 ① (0) | 2023.11.07 |