일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 11054
- 24479
- sequelize
- 카카오클라우드스쿨
- 알고리즘
- 11053
- Spring #Java #Spring Boot
- Spring #Java #Spring Boot #싱글톤
- boj
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- 15552
- Spring #Spring Boot #Java
- kakaocloudschool
- 코딩테스트
- java
- 9020
- Spring
- 2447
- 백준
- SpringTokenizer
- 카카오 클라우드 스쿨
- 파이썬
- Java #오븐시계 #백준
- node
- Java #백준 #코딩테스트
- kakaocloud
- python
- Java #코딩테스트
- 1110
- 7568
- Today
- Total
YoungSoo
스프링 입문 - 회원 도메인과 리포지토리 만들기 본문
도메인 및 리포지토리 생성
domain과 repository 패키지를 생성해주고 domain에는 값을 담을 Member클래스를 만들어주고 repository에서는 회원을 저장하고 찾고 여러가지 작업을 할 인터페이스와 그것을 구현하는 내용이 담긴MemoryMemberRepository를 만들어준다.
Member
Long 타입의 id와 String 타입의 name 두 가지를 만들어 주었다. 여기서 id는 DB에 저장할 때 사용하는 단순
시퀀스로 정하는 임의의 값이고 고객이 가입할 때 직접 입력하는 것이 아니고 자동으로 설정하여 데이터를
구분하는데 사용할 예정이다. 그리고 name은 이름이고 이것들을 사용하기 위해 Getter와 Setter를 만들어주었다.
MemberRepository(인터페이스)
네가지의 기능을 만들 선언했고 save는 회원을 저장하고 반환하는 기능이고 findById는 id를 통해 회원을 찾는 것이고 findByName은 name을 통해 회원을 찾는 것이고 findAll은 지금까지 저장된 모든 회원들을 반환해주는 기능이다.
Optional은 간단하게 말하면 findById나 findByName에서 Null이 있을 수도 있는데 그걸 감싸서 반환하는 방법이고 자바8에서 추가된 기능이다.
MemoryMemberRepository
Save
구현체를 만들어서 앞에서 선언해준 기능들을 재정의(Override)해줄 것이다. 먼저 앞서 만든 MemberRepository를 implements해주고 Alt + Enter을 해서 MemberRepository의 추상 메소드를 재정의 한다.먼저 save에서 Map을 사용할 것인데 그것을 위해 store라는 참조변수를 만들어준다.실무에서는 이렇게 공유되는 변수일 때 동시성 문제가 생길 수 있어 ConcurrentHashMap을 사용해야하는데예제이기 때문에 일반 HashMap을 사용해주었다. 그리고 sequence를 선언해주는데 이것은 id에 들어갈 값을 단순하게 0, 1, 2 키 값을 생성해주는 것이라고 생각하면 된다.이것도 실무에서는 Atomic Long을 사용해주어야 하는데 마찬가지로 예제이기 때문에 이렇게 사용했다.그리고 member.setId(++sequence)로 시스템이 정해주는 id로 설정하고 저장해주어 반환한다.
findById
store.getId(id)를 통해 store에서 id가 같은 값을 꺼내온다.
과거에는 Null을 단순히 반환했지만, 최근에는 ofNullable을 사용해 반환하는 값이 Null이어도 반환할 수 있다.
findByName
Java의 람다를 이용해 store.values.stream을 이용해 반복해주고 .filter(member -> member.getName.equals(name))을 이용해 파라미터로 넘어온 값과 가져온 값이 같은지 확인해주고
.findAny를 통해 그 중에 같은 값이 있으면 반환해주고 없다면 Optional로 감싸 Null을 반환한다.
findAll
store에 담긴 member가 모두 반환된다.
이렇게 구현을 했고 제대로 동작하는지 테스트를 하기 위해 다음 시간에 테스트 케이스를 작성해보도록 하겠다.
해당 글은 김영한 님의 인프런 강의를 보고 정리한 글 입니다.
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'BE > Spring' 카테고리의 다른 글
스프링 입문 - 회원 서비스 개발 (0) | 2022.07.07 |
---|---|
스프링 입문 - 회원 리포지토리 테스트 케이스 작성 (0) | 2022.07.07 |
스프링 입문 - 비즈니스 요구사항 정리 (0) | 2022.07.06 |
스프링 입문 - API (0) | 2022.07.04 |
스프링 입문 - MVC와 템플릿 엔진 (0) | 2022.07.03 |