2. 리포지토리 만들기
main>java폴더>hello.hellospring패키지>domain패키지
repository패키지>MemberRepository 인터페이스 생성
MemoryMemberRepository 클래스 생성
MemberRepository 인터페이스 : 4가지 기능 정의
packagehello.hellospring.repository;importhello.hellospring.domain.Member;importjava.util.List;importjava.util.Optional;publicinterfaceMemberRepository {//4가지 기능 구현:1.저장 2. id로 찾기 3.name으로 찾기 4.저장된 모든 회원 리스트 반환Membersave(Member member);//Optional<Member> findById(Long id);//Java8 : Optional이란 객체가 Null일 수도 있는데 null을 반환하는 방법 중에 Optional로 감싸서 반환하는 방법.Optional<Member> findByName(String name);List<Member> findAll();}
MemoryMemberRepository 클래스 : 4가지 기능 구현
clearStore() 메서드는 테스트코드에서 메서드가 한번 실행될 때마다 store를 비워준다!
Optional은 null을 가질 수도 있는 객체를 받을 때 이 Optional이라는 것으로 한번 감싼다. null 객체를 받는(처리하는) 방법들 중 하나이다.
packagehello.hellospring.repository;importhello.hellospring.domain.Member;importjava.util.*;publicclassMemoryMemberRepositoryimplementsMemberRepository{privatestaticMap<Long,Member> store =newHashMap<>();//(참고 : 현업=>공유되는변수일 경우 concurrenthashmap을 써야함)privatestaticlong sequence =0L;//sequence는 0/1/2 키값 생성하주는 애. 이또한 마찬가지로 현업에서는 동시성 문제로 autumnLong으로 해줘야함. @OverridepublicMembersave(Member member) {member.setId(++sequence);store.put(member.getId(),member);//맵에 저장.return member;//저장된 결과 반환. } @OverridepublicOptional<Member> findById(Long id) {returnOptional.ofNullable(store.get(id)); } @OverridepublicOptional<Member> findByName(String name) {//람다를 써서 루프 돈다.filter()사용.//member.getName()이 파라미터로 넘어온 name과 같은지 확인.//findAny():하나라도 찾는 것.//결과가 Optional로 반환.returnstore.values().stream().filter(member ->member.getName().equals(name)).findAny(); } @OverridepublicList<Member> findAll() {//루프돌리기도 편해서 실무에서 리스트 많이 쓴다.returnnewArrayList<>(store.values()); }publicvoidclearStore(){store.clear(); }}