회원 도메인 생성
main>java폴더>hello.heellospring패키지>domain패키지 생성>Member 클래스 생성, 정의
package hello.hellospring.domain;
public class Member {
private Long id;//시스템이 저장하는 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;
}
}
2. 리포지토리 만들기
main>java폴더>hello.hellospring패키지>domain패키지
repository패키지>MemberRepository 인터페이스 생성
MemoryMemberRepository 클래스 생성
MemberRepository 인터페이스 : 4가지 기능 정의
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {//4가지 기능 구현:1.저장 2. id로 찾기 3.name으로 찾기 4.저장된 모든 회원 리스트 반환
Member save(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 객체를 받는(처리하는) 방법들 중 하나이다.
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<>();//(참고 : 현업=>공유되는변수일 경우 concurrenthashmap을 써야함)
private static long sequence = 0L;//sequence는 0/1/2 키값 생성하주는 애. 이또한 마찬가지로 현업에서는 동시성 문제로 autumnLong으로 해줘야함.
@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) {//람다를 써서 루프 돈다.filter()사용.
//member.getName()이 파라미터로 넘어온 name과 같은지 확인.
//findAny():하나라도 찾는 것.
//결과가 Optional로 반환.
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();
}
}