[9강]

2023. 1. 30. 17:04Spring 강의/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을 넣어서 반환한다.

잘 돌아가는지 확인해서 테스트를 해봐야한다.

그건 다음 게시물에

 

'Spring 강의 > section3' 카테고리의 다른 글

[12강]  (0) 2023.02.02
[11강]  (0) 2023.02.02
[10강]  (0) 2023.02.02
[8강]  (0) 2023.01.30