
Member 인터페이스입니다.
package hello.hello_spring.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;
}
}
MemberRespository클래스 입니다.
package hello.hello_spring.repository;
import hello.hello_spring.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();
}
이 코드는 MemoryMemberRepository라는 클래스로, 회원 정보를 메모리에 저장하는 저장소(repository) 역할을 합니다. 이 클래스는 MemberRepository 인터페이스를 구현하고 있습니다.
package hello.hello_spring.repository;
import hello.hello_spring.domain.Member;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
// MemoryMemberRepository 클래스는 MemberRepository 인터페이스를 구현합니다.
public class MemoryMemberRepository implements MemberRepository {
// 회원 정보를 저장하기 위한 Map을 선언합니다.
// 키는 회원의 ID(Long 타입), 값은 회원(Member 객체)입니다.
private static Map<Long, Member> store = new HashMap<>();
// 회원의 ID를 자동으로 생성하기 위한 시퀀스를 선언합니다.
private static long sequence = 0L;
// 회원 정보를 저장하는 메서드입니다.
@Override
public Member save(Member member) {
// 회원 객체의 ID를 시퀀스를 증가시켜 설정합니다.
member.setId(++sequence);
// Map에 회원 객체를 저장합니다. 키는 회원의 ID, 값은 회원 객체입니다.
store.put(member.getId(), member);
// 저장된 회원 객체를 반환합니다.
return member;
}
// ID로 회원을 찾는 메서드입니다.
@Override
public Optional<Member> findById(Long id) {
// Map에서 ID로 회원 객체를 찾아 반환합니다.
// Optional.ofNullable을 사용하여 회원 객체가 없을 경우를 대비합니다.
return Optional.ofNullable(store.get(id));
}
// 이름으로 회원을 찾는 메서드입니다.
@Override
public Optional<Member> findByName(String name) {
// Map의 모든 값을 Stream으로 변환한 후 필터링을 통해 이름이 일치하는 회원을 찾습니다.
// findAny는 일치하는 첫 번째 회원을 Optional로 반환합니다.
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
// 모든 회원 정보를 반환하는 메서드입니다.
@Override
public List<Member> findAll() {
// Map의 모든 값을 ArrayList로 변환하여 반환합니다.
return new ArrayList<>(store.values());
}
}
이제 각 부분을 자세히 설명하겠습니다:
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
}
MemoryMemberRepository 클래스는 MemberRepository 인터페이스를 구현합니다.store는 회원 정보를 저장하기 위한 Map입니다. Long 타입의 키(ID)와 Member 객체를 값으로 저장합니다.sequence는 회원의 ID를 자동으로 생성하기 위한 시퀀스입니다. 회원이 저장될 때마다 이 값이 증가합니다.@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
save 메서드는 새로운 회원을 저장합니다.member.setId(++sequence)).store 맵에 회원 객체를 저장합니다. 키는 회원의 ID, 값은 회원 객체입니다(store.put(member.getId(), member)).@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
findById 메서드는 주어진 ID로 회원을 찾습니다.store 맵에서 주어진 ID로 회원 객체를 찾아 반환합니다. 이때, Optional.ofNullable을 사용하여 회원 객체가 없을 경우를 대비합니다.@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
findByName 메서드는 주어진 이름으로 회원을 찾습니다.store 맵의 모든 값을 스트림으로 변환하고(store.values().stream()), 필터를 사용하여 이름이 일치하는 회원을 찾습니다(.filter(member -> member.getName().equals(name))).findAny 메서드를 사용하여 일치하는 첫 번째 회원을 Optional로 반환합니다.@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
findAll 메서드는 모든 회원 정보를 반환합니다.store 맵의 모든 값을 ArrayList로 변환하여 반환합니다.이 클래스는 간단한 메모리 기반의 회원 저장소를 구현한 것으로, 데이터베이스와 같은 영구 저장소 대신 메모리에 데이터를 저장합니다. 예제에서는 간단하게 회원의 정보를 저장하고, 검색하고, 반환하는 기능을 제공합니다.