본문 바로가기
Java/스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술

[회원 관리 예제, 백엔드 개발 - (2)] 회원 도메인과 리포지토리 만들기

by Rezal 2022. 6. 29.

git repository : https://github.com/Rezalog/spring-boot-entry-inf

 

GitHub - Rezalog/spring-boot-entry-inf

Contribute to Rezalog/spring-boot-entry-inf development by creating an account on GitHub.

github.com

 

 

 

 

  • Package
    • domain : 비즈니스 로직에서 사용되고 DB에 저장되어 관리되기 위한 객체
      • Member
    • repository : domain 객체를 저장하기 위함
      • MemberRepository(interface)
      • MemoryMebmerRepository(interface impl)

 

domain

domain > Member

식별자 id, 입력받을 회원 정보인 name 에 대한 getter/setter 구현.

 

 

Repository

 

repository > MemberRepository(interface)

  • 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()
      • 저장된 회원의 모든 정보를 반환한다.

 

 

  • 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()를 담아 보여준다.