회원 도메인과 리포지토리 만들기

회원 객체

package hello.hellospring.domain;
 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;
} }

회원 리포지토리 인터페이스

package hello.hellospring.repository;
 import hello.hellospring.domain.Member;
 import java.util.List;
 import java.util.Optional;
 public interface MemberRepository {
     Member save(Member member);
     Optional<Member> findById(Long id);
     Optional<Member> findByName(String name);
     List<Member> findAll();
}

회원 리포지토리 메모리 구현체

package hello.hellospring.repository;
 import hello.hellospring.domain.Member;
 import java.util.*;
/**
* 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려 */
 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 List<Member> findAll() {
         return new ArrayList<>(store.values());
     }
     @Override
     public Optional<Member> findByName(String name) {
         return store.values().stream()
                 .filter(member -> member.getName().equals(name))
                 .findAny();
}
     public void clearStore() {
         store.clear();
} }