1. domain 패키지를 만들고 Member 클래스를 생성한다.
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;
}
}
name은 사용자가 입력하고, id는 서버에서 name을 구분하기위해 자동으로 생성한다.
2. 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);
Optional<Member> findByName(String name);
List<Member> findAll();
}
member를 저장해주는 save 메서드, id로 조회가능한 findById 메서드, name으로 조회가능한 findbyName 메서드, 모든 회원목록이 조회가능한 findAll 메서드를 생성한다.
위에 코드중 Optional로 Member를 감싼걸 볼 수 있다.
Optional이란?
: null이 올 수 있는 값을 감싸는 Wrapper클래스로, 참조하더라도 NPE(NullPointerException)가 발생하지 않도록 해준다.
3. repository 패키지에 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());
}
}
1) MemberRepository를 implements한다.
2) member를 저장할 수 있는 Map을 생성한다.
3) 0부터 id를 1씩 추가해 생성해주는 sequence를 생성한다.
4) save메서드
: - member에 id값을 sequence에 1씩 올려 넣어준다.
- store에 id를 member란 이름으로 넣어준다.
- member를 return한다.
5) findById메서드
: - store.get(id)를 반환해주면 되지만, 없으면 null이 되기때문에 Optional.ofNullable로 감싸고 넣어주면 클라이언트쪽에서 변경이 가능하다. (뒤에서 설명)
6) findByName메서드
: - store에서 filter를 거치는데, 람다식으로 파라미터에서 가져온 name과 equals를 통해 member의 name과 비교해서 같은게 있으면 반환한다.
- 위 작업을 루프를 돌려 쭉 실행시킨다.
- 끝까지 돌렸는데 없으면 null을 반환한다.
7) findAll메서드
: - store의 values(member)를 ArrayList 객체로 반환한다.
다음으로 위의 코딩이 제대로 작동되는지 테스트케이스를 작성해보자.
'Spring Practice' 카테고리의 다른 글
DI란? (Dependency Injection) (0) | 2024.04.10 |
---|---|
[#10] Spring 파헤치기 : 회원 리포지토리 테스트 케이스 작성 (0) | 2022.03.24 |
[#8] Spring 파헤치기 : 회원 관리 예제(비즈니스 요구사항 정리) (0) | 2022.03.02 |
[#7] Spring 파헤치기 : API (0) | 2022.03.02 |
[#6] Spring 파헤치기 : MVC와 템플릿 엔진 (0) | 2022.02.25 |