🙂강의🙂
▧ 목차 ▧
- 회원 객체
- 회원 리포지토리 인터페이스
- 회원 리포지토리 메모리 구현체
[ 회원 객체 ]
- src/main/java/hello.hellospring 에 domain package 추가
- domain package 에 Member class 추가
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
// Alt + Insert -> Getter and 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;
}
}
[ 회원 리포지토리 인터페이스 ]
- src/main/java/hello.hellospring 에 repository package 생성
- repository package 에 MemberRepository Interface 생성
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); // name 으로 회원 찾기
List<Member> findAll(); // 지금까지 저장한 모든 회원 리스트 반환
}
[ 회원 리포지토리 메모리 구현체 ]
- repository package 에 MemoryMemberRepository class 생성
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository{
// 동시성 문제가 고려되지 않음 : 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence); // store 에 저장 전 id setting
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
// Optinal.ofNullable 사용 시 Null 값이 반환되어도 사용 가능
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());
}
}
'Spring > 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
[ 회원 관리 예제 - 백엔드 개발 ] 회원 서비스 개발 (0) | 2023.09.08 |
---|---|
[ 회원 관리 예제 - 백엔드 개발 ] 회원 리포지토리 테스트 케이스 작성 (1) | 2023.09.08 |
[ 회원 관리 예제 - 백엔드 개발 ] 비즈니스 요구사항 정리 (0) | 2023.09.08 |
[ 스프링 웹 개발 기초 ] API (0) | 2023.09.07 |
[ 스프링 웹 개발 기초 ] MVC 와 템플릿 엔진 (0) | 2023.09.07 |