공부 자료:
웹 개발 실습 #2
구현체 MemoryMemberRepository 를 생성하고
MemberRepository의 모든 메서드를 구현한다.
1. save ( ) 메서드 구현하기 : 저장 기능 구현
1-1) 저장을 해놓아야 하는 곳 생성 : store
Map<Key,Value> 형식
Key값이 되는 것은 ID(Long), 값은 Member 객체다
HashMap과 long
- 실무에서는 동시성 문제가 있을 수 있어서
'store'와 같은 공유되는 변수인 경우,
ConcurrentcyMap을 사용해야 하지만
실습에서는 간단히 HashMap 사용
- long 을 사용할 때에도 동시성 문제를 고려하여
AtomicLong을 사용해야 하지만
실습에서는 단순 long 타입 사용
1-2) 저장되면서 시스템에서 자동으로 id를 생성해줄 수 있는 기능 구현 : seqeunce
sequence
0,1,2 순으로 Key값을 생성해주는 것
동시성 Concurrency ?
어떤 프로그램이나 알고리즘이 순서에 상관없이 동시에 수행될 수 있는 것을 concurrent 하다고 한다.
한 프로그램 내에서 실행되는 여러 스레드가 객체를 공유하는 경우를 동시성이라고 한다.
한 user의 요청을 처리하는 데에 1초가 필요한 시스템이 있는 경우, user가 늘어남에 따라 모든 user는 자신보다 먼저 도착한 요청이 끝날 때까지 기다려야 한다. concurrency가 여러 유저를 동시에 처리함으로써 처리량을 향상시키기 가능하다.
1-3) save 함수 overriding
member.setId(++sequence);
사용자에 의해 member가 만들어질 때,
사용자가 입력한 id만 넣어져 있는 상태이므로
sequence에 의해 생성되는
0,1,2 등의 값들을 Member의 Id값으로 넣는다.
store.put(member.getId(), member)
Map<Key,Value>형식의 store변수에
id와 member 객체를 put 한다. = 저장 완.
2. findbyId( ) 메서드 구현하기 : Id 조회 기능 구현
Optional.ofNullable
Member.getId()로 조회할 때 null값이 반환되어도
Optional로 감싸서 반환이 가능하게 설정
이 값은 클라이언트에서 처리할 것.
3.findbyName( ) 메서드 구현하기 : Name 조회 기능 구현
.filter(member -> member.getName( ).equals(name)).findAny()
람다 함수형으로, Map에서 loop를 돌리게 된다.
member에서 get한 name과 parameter로 들어온 name이 일치하는지 확인한다.
findAny( ) 를 통해 하나라도 찾으면 반환된다.
하나도 없다면 Optional에 null이 포함돼서 반환된다.
4. findAll( ) 메서드 구현하기 :
ArrrayList<>(store.values());
store의 value는 Member!
store.values()를 통해 member들이 쭉 반환이 된다.
'자기발전소 > # JAVA' 카테고리의 다른 글
[JAVA] 배열 개념 정리: 배열 복사 arraycopy (0) | 2021.08.01 |
---|---|
Spring Boot 실습 3: Repository Test (0) | 2020.11.06 |
Spring Boot 실습 1: 비즈니스 로직 (0) | 2020.11.05 |
Spring 웹 개발 기초 (0) | 2020.11.05 |
Spring Boot 공부 기록 2 (0) | 2020.11.05 |