스프링 공부/인프런 김영한 스프링 입문 노트정리

3-2. 회원 도메인과 리포지토리 만들기

모항 2022. 7. 26. 05:50

이번 강의에서는 도메인(domain)과 리포지토리(repository)를 만든다. 이것들의 역할은 직전 강의에서 배웠으니 까먹으면 돌아가서 살펴보자.

도메인용 패키지를 만들어서 그 안에 Member 클래스를 만들어준다.

그리고 리포지토리용 패키지를 만들어서 그 안에 Member 객체들을 다루는 관리 툴들을 만들어준다.

 

 

 

 

도메인 만들기

 

이 위치에 domain이라는 패키지를 만든다.

 

그리고 domain 내에 Member라는 클래스를 만든다.

 

클래스 내부는 이렇게 필드와 getter, setter로 간단하게 채워준다.

근데 이제 보니까 각 변수들이 클래스 안에서 몇 번 사용되었는지까지 IntelliJ가 알려준다... 정말 편리하다.

 

 

 

 

 

리포지토리 만들기

 

이번엔 domain 레포지토리와 동일한 레벨에 repository라는 패키지를 만든다.

 

 

이 패키지 안에는 인터페이스와 그 인터페이스를 구현한 클래스를 만들어줄 것이다.

 

 

먼저 인터페이스부터 만든다.

MemberRepository라는 인터페이스를 만들어준다.

내용은 위와 같이 채운다.

여기서 Optional<>은, 리턴값이 null일 수도 있는 함수의 리턴값을 감싸는 Wrapper 클래스이다.

null이 리턴될 가능성이 있고, null이 리턴되었을 때 오류 등의 문제가 발생할 수 있는 경우에 이렇게 Optional로 감싸주면 NullPointerException의 부담을 줄일 수 있다.

Optional에 대해서는 알아볼 것이 더 많은데 일단 여기까지만 알고 넘어간 뒤 나중에 더 조사해봐야겠다.

 

 

 

그 다음은 클래스 차례이다.

같은 패키지 안에 MemoryMemberRepository라는 클래스를 만든다.

 

이 클래스는 방금 작성한 MemberRepository 인터페이스를 구현할 것이다.

 

회원들의 정보를 저장할 HashMap<Long, Member> store과

새로운 회원 정보가 저장될 때마다 고유의 ID를 생성하는 데 사용할 Long형 변수 sequence를 필드로 선언한다.

 

새 회원 정보를 저장하는 save는 아래와 같이 만들어준다.

ID값을 부여하고, store에 회원 정보를 저장하고, 저장된 member 객체를 리턴해준다.

 

 

ID를 기준으로 회원을 찾는 findById는 아래와 같이 만들어준다.

Optional을 사용하지 않았다면 단순하게 아래처럼 적으면 됐을 것이다.

하지만 우리는 Optional을 사용하도록 인터페이스를 만들어놨기 때문에, 리턴값을 Optional.ofNullable()로 감싸서 리턴해주어야 한다.

 

 

이름을 기준으로 회원을 찾는 findByName은 아래와 같이 만들어준다.

 

 

저장된 모든 회원 정보가 담긴 리스트를 반환하는 findAll은 아래와 같이 만들어준다.

store의 value들, 즉 Member 객체들이 모두 담긴 ArrayList를 통째로 리턴한다.

 

 

 

이렇게 해주면 완성이다.

다음 시간에는 이번에 만든 기능들이 잘 동작하는지 테스트 케이스를 통해 시험해볼 것이다.