서비스를 만들 때 진행 순서는 다음과 같다
그럼 이제 회원 관리 서비스를 만들어보자!
비즈니스 요구사항 정리
회원 도메인과 리포지토리 만들기
도메인
Member
라는 클래스를 만들고public class Member {
private Long id;
private String name;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
리포지토리
save(Member member)
findById(Long id)
findByName(String name)
findAll()
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
@Override
애노테이션이 필요하다.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)); //null 이 나올 가능성이 있을 때 Optional로 감싸준다.
}
@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());
}
public void clearStore() {
store.clear();
}
}
Java 공부 해야겠다..
회원 서비스 개발
서비스
join(Member memeber)
findById(memeberId)
, findMembers()
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
/**
* 회원가입
*/
public Long join(Member member) {
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);
}
}
테스트 케이스 작성
테스트 케이스 작성은 대규모 개발에 있어서 매우매우 중요한 것 중 하나라고 한다.
수정한 코드가 있을 때마다 전체 프로젝트를 껐다 키는것을 반복하는 것은 매우 비효율적이기 때문이다!
테스트에 대해서는 다음 포스터에서 알아보도록 하자!