728x90
1. 회원
hello.hellospring.domain 패키지 생성, Member 클래스 파일 작성
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
// getter/setter 생성
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. 회원 객체를 저장하는 hello.hellospring.repository 패키지 생성, MemberRepository 인터페이스 파일 작성
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); // 저장소에서 ID로 찾아오기
Optional<Member> findByName(String name); // 저장소에서 이름으로 찾아오기
List<Member> findAll(); // 지금까지 저장된 회원을 리스트로 반환
}
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); // store에 저장
return member; // 저장된 결과 반환
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id)); // store에서 id를 가져오는데 null이 반환될 수 있게 함
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream() // 람다를 사용
.filter(member -> member.getName().equals(name)) // member.getName이 파라미터로 넘어온 name과 같은 지 확인
.findAny(); // 찾으면 반환 못찾으면 Optional에 null을 포함하여 반환
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values()); // store의 values(멤버)들을 반환
}
public void clearStore() {
store.clear();
}
}
실무에서는 동시성 문제가 있어 공유되는 변수일때는 ConcurrentHashMap, AtomicLong을 사용해야 함
728x90
'스프링 부트 > 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
11. 회원 서비스 개발 (0) | 2023.03.07 |
---|---|
10. 회원 리포지토리 테스트 케이스 작성 (0) | 2023.03.07 |
8. 비즈니스 요구사항 정리 (0) | 2023.03.07 |
7. API (0) | 2023.03.07 |
6. MVC와 템플릿 엔진 (0) | 2023.03.07 |