김영한님의 스프링 입문 강의를 들으며 그동안 헷갈렸던 부분을 정확하게 알기 실습해보며 메모한 것이다.
- 참고 - 김영한님 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
- 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현
- 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
- 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
1. member 객체 생성
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;
}
}
2.MemberRepositofy

3. 구현체를 만들자. MemoryMemberRepository를 생성해서 implements MemberRepository를 받음.
- 맥 - option + enter를 눌러서

이제 구현을 해보자~~!

- member.setId(++sequence); => 스토어에 넣기 전에 id값을 세팅해줌. 이름은 넘어온 상태라고 보면 된다.
- Member안에 들어가 보면 String name 이 있다. 회원가입할 때 고객이 적는 이름이 여기에 저장되는 것.
- id는 시스템이 저장을 할 때 등록되는, 시스템이 정해주는 것.
그 후에 스토어에 put해서 저장해줌. 그리고 그 스펙에 따른 결과를 반환 (->return member;)

- 그런데 찾은 결과가 없으면 어떻게 될까?
-> 없으면 null이거나 그러겠죠~? ===> null이 반환될 가능성이 있으면 Optional로 감싸준다.

- 이렇게 해주면 store.get(id) 이 결과가 null이여도 감쌀 수 있다. 이렇게 감싸서 반환을 해주면 클라이언트에서 뭔가 할수가 있는 상태가 된다고 한다!
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name)) // 람다
.findAny(); // 찾으면 반환해줌.
}
- stream -> 루프를 돌리는 것.
- 람다 => member에서 member.getName()이 파라미터로 넘어온 name이랑 같은지 확인.
같은 경우에만 필터링 된다.
- findAny는 하나로도 찾는 거다. 루프를 다 돌면서 (map에서 돌면서) 하나 찾아지면 그걸 그냥 반환하는 것. 그런데 끝까지 돌렸는데도 없으면 옵셔널에 null이 포함되서 반환이 되는 것.
구현 끝!!