[02. 회원 도메인과 리포지토리 만들기]
MemberRepository 인터페이스를 상속받은 클래스이다.
간단한 테스트를 위해 ID는 자동 증가하는 숫자로 설정한다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
}
Stream은 array를 순회하면서 filter에 맞는 값을 찾는 메소드이다.
Java 8부터 편의성을 위해 추가되었다.
[03. 회원 리포지토리 테스트 케이스 작성]
테스트란 코드를 코드로 검증하는 것이다.
테스트를 만들고 구현 클래스를 만들어서 실행시켜 보는 (틀을 만들어 놓고 코드가 해당 틀에 잘 들어맞는지 확인하는) 방식을 테스트 주도 개발 (TDD, test driven development)이라고 한다.
그렇지만 여기서는 TDD가 아니고 그냥 테스트 케이스를 만들어서 돌려 본 것이다. 구현 클래스를 만든 다음에 테스트를 돌려 본 것이기 때문이다.
테스트 코드를 직접 짜도 되지만, 이렇게 메뉴를 이용해 테스트를 돌려 볼 수도 있다.
[04. 회원 서비스 개발]
Ctrl + Alt + Shift + T 단축키를 눌러 Refactor 메뉴를 열 수 있다.
생성한 extracted method는 우측의 설정 버튼을 눌러 이름을 변경할 수 있다.
package hello.hellospring.service;
import hello.hellospring.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) {
validateDuplicateMember(member); // 중복 이름 X (이 코드 설계에서 id는 자동 증가하는 숫자이기 때문에 unique하다.)
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName()).ifPresent(m -> {
try {
throw new IllegalAccessException("중복 이름");
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
});
}
/*전체 회원 조회*/
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
[05. 회원 서비스 테스트]
Ctrl + Shift + T를 눌러 나온 메뉴에서 Create New Test를 선택할 수 있다.
'공부 > [인프런] 스프링 입문' 카테고리의 다른 글
키보드 alt, ctrl, shift 키 아이콘 기호 정리 (0) | 2023.11.08 |
---|---|
[인프런] 스프링 입문 | 섹션 2. 스프링 웹 개발 기초 (0) | 2023.06.27 |
[인프런] 스프링 입문 | 섹션 1. 프로젝트 환경설정 (0) | 2023.06.27 |