[9강]
2023. 1. 30. 17:04ㆍSpring 강의/section3
회원 도메인과 레파지토리를 만들어보자.
먼저 domain과 repository라는 디렉토리를 만들고
그 안에 각각 Member 클래스, MemberRepository 인터페이스, MemoryMemberRepostiory 클래스를 만든다.
1. Member 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package hello.hellospring2.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;
}
}
|
cs |
2. MemberRepository 인터페이스
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package hello.hellospring2.repository;
import hello.hellospring2.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(); //지금까지 저장된 모든 회원의 리스트를 준다
}
|
cs |
Optional : 요즘은 null이 반환될 때 null 그 자체로 주기보다는 Optional로 감싸서 주는 추세이다.
3. MemoryMemberRepository
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package hello.hellospring2.repository;
import hello.hellospring2.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의 이름이 넘어왔다.
member.setId(++sequence); //store로 가기 전에 id를 등록한다.
store.put(member.getId(), member); //멤버의 id와 이름 등록
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id)); //결과가 없으면 null일 텐데 그러면 optional에 감싸서 보냄
}
@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());
//store에 있는 value 즉 멤버들만 모아다가 리스트로 반환함
}
}
}
|
cs |
중간에 Optional<Member> findByName 설명
- store.values() : store라는 map의 key와 value중 value들만 가져옴
- stream() : stream 객체 만들기. store에서 value값만 가져온 것을 stream 객체에 복사한 것
- filter() : stream 중에서 원하는 조건에 해당하는 값만 가져오게 하는 filter
- filter(member -> member.getName().equals(name)) : 등록된 멤버의 이름과 찾고 있는 이름(name)이 같다면
- findAny() : 하나라도 가져와라
- 끝까지 없다면 Optional에 null을 넣어서 반환한다.
잘 돌아가는지 확인해서 테스트를 해봐야한다.
그건 다음 게시물에