git repository : https://github.com/Rezalog/spring-boot-entry-inf
- Package
- domain : 비즈니스 로직에서 사용되고 DB에 저장되어 관리되기 위한 객체
- Member
- repository : domain 객체를 저장하기 위함
- MemberRepository(interface)
- MemoryMebmerRepository(interface impl)
- domain : 비즈니스 로직에서 사용되고 DB에 저장되어 관리되기 위한 객체
domain
식별자 id, 입력받을 회원 정보인 name 에 대한 getter/setter 구현.
Repository
- MemberRepository(interface)
- Member save(Member member)
- 회원 정보가 저장되면 저장된 회원의 정보(Member 객체)가 반환
- Optional<Member> findById(Long id)
- 회원 정보의 id(식별자)로 회원 정보를 받아온다.
- Optional : Java 8 기능으로 null 이 반환될 가능성에 대한 처리에 필요
- Optional<Member> findByName(String name)
- 회원 정보의 name 으로 회원 정보를 받아온다.
- List<Member> findAll()
- 저장된 회원의 모든 정보를 반환한다.
- Member save(Member member)
- MemoryMemberRepository(interface impl)
- private static Map<Long, Member> store = new HashMap<>()
- store 는 Map 의 형태로 식별자 id 에 대한 Member 객체의 정보를 저장한다.
- 동시성 문제때문에 HashMap 사용은 원래 적절하지 않음.
- private static long sequence = 0L
- key 값을 생성하기 위한 시퀀스
- 마찬가지로 동시성 문제때문에 별도의 시퀀스 생성 방식이 있음.
- Member save(Member member)
- save 메소드가 호출되면 Member 의 id 값을 sequence 를 이용해 저장하고, name 은 별도로 입력받아 저장한다.
- 생성한 id, 입력받은 name 을 Member 객체에 담아 store Map 에 저장한다.
- Optional<Member> findById(Long id)
- 없는 id 를 조회했을 때 null 이 반환될 수 있으므로 Optional.ofNullable을 활용한다.
- Optional<Member> findByName(String name)
- 고유한 식별자 값인 id 가 아닌 name으로 찾으므로 람다식을 이용한 루프를 돌린다.
- 즉, store에 저장해두었던 회원 정보의 values 들을 돌면서 해당 정보가 입력받은 name 과 같은지 검증하고, findAny로 하나라도 같다면 해당 값을 반환한다.(없다면 Optional에 null 이 포함된 값이 반환된다.)
- List<Member> findAll()
- store Map 에 저장된 모든 정보를 반환하면 되므로, return 될 때 ArrayList 인스턴스를 생성하여 store.values()를 담아 보여준다.
- private static Map<Long, Member> store = new HashMap<>()
'Java > 스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
[회원 관리 예제, 백엔드 개발 - (4)] 회원 서비스 개발 (0) | 2022.06.30 |
---|---|
[회원 관리 예제, 백엔드 개발 - (3)] 회원 리포지토리 테스트 케이스 작성 (0) | 2022.06.29 |
[회원 관리 예제, 백엔드 개발 - (1)] 비즈니스 요구사항 정리 (0) | 2022.06.29 |
[스프링 웹 개발 기초 - (3)] API (0) | 2022.06.29 |
[스프링 웹 개발 기초 - (2)] MVC와 템플릿 엔진 (0) | 2022.06.29 |