반응형
순서
- 3. 회원 관리 예제 - 백엔드 개발
- 3.1 비즈니스 요구사항 정리
- 3.2 회원 도메인과 리포지토리 만들기
- 3.3 회원 리포지토리 테스트 케이스 작성
- 3.4 회원 서비스 개발
- 3.5 회원 서비스 테스트
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 코드에 작성하여 검증을 해 보자
반응형
'Java | Spring > Spring 입문' 카테고리의 다른 글
[스프링 입문] 4.1 스프링 빈과 의존관계 (0) | 2022.03.12 |
---|---|
[스프링 입문] 3.5 회원 서비스 테스트 (2) | 2022.02.27 |
[스프링 입문] 3.3 회원 리포지토리 테스트 케이스 작성 (0) | 2021.10.05 |
[스프링 입문] 3.2 회원 도메인과 리포지토리 만들기 (0) | 2021.09.27 |
[스프링 입문] 3.1 비즈니스 요구사항 정리 (0) | 2021.09.15 |
댓글