도메인 패키지를 만들어 관리하고, Member
class 생성
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;
}
}
레포지토리 패키지를 만들어 관리하고, Member
객체를 저장할 레포지토리 생성한다. 우선 인터페이스를 만들자. 인터페이스로 작성하는 이유는 어떤 데이터베이스를 사용하여 저장할지 아직 정하지 않았기 때문이다.
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();
}
Optional이란?
먼저 Optional객체는 wrapper 클래스로 모든 타입의 변수를 저장할 수 있다. Optional을 사용하면 null 예외처리를 간단하게 할 수 잇다. 해당 객체에 널값이 들어오더라도 내장 메소드로 NullPointerException 을 간단히 처리할 수 있게 해준다.
Optional 객체를 생성하려면 ofNullable() 메소드를 이용해야한다.
ex)Optional <String> test = Optional.ofNullable("test");
이제 MemberRepository
인터페이스를 상속받아 구현하는 MemoryMemberRepository
를 작성하자.
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());
//map에서 .values()를 사용하면 map의 전체내용을 collections로 반환
}
public void clearStore() {
store.clear();
}
}
람다식을 써본적이 없어 아직 이해하기 어렵다 ㅠ