Development/Spring

스프링 입문 - 회원 도메인과 리포지토리 만들기

양선규 2023. 10. 29. 23:12
728x90
반응형

hello.hellospring.domain

 
우선, 도메인을 구현할 패키지인 hello.hellospring.domain 패키지를 만들자.
 
 

Member 클래스

 
domain 패키지 하위에, Member 클래스를 만들자.
 
 

Member 도메인

 

그리고 위와 같이 도메인 역할을 할 Member 클래스를 작성해 주자.
 
비즈니스 요구사항에서, 데이터는 회원ID, 이름 2가지였다.
그 역할을 해줄 id, name 필드를 선언하고 getter setter를 작성한 것이다.
 
 

hello.hellospring.repository

 
다음은 repository 패키지를 만들어 주자.
 
 

MemberRepository

 
repository 패키지 하위에, MemberRepository "인터페이스"를 만들자.
 
 

인터페이스 작성

 
위와 같이 인터페이스를 작성해주자.
여기서 구현을 할 수는 없고, 추상 메소드 4개를 선언했다.
이것은 MemoryMemberRepository라는 구현 클래스에서 구현할 것이다.
 
 

MemoryMemberRepository

 
repository 패키지 하위에, MemoryMemberRepository 클래스를 생성한다.
 
 

필드 생성

 
2개의 필드를 생성해주자.
store 필드는 회원정보를 담을 저장소이다. id와 Member 객체가 서로 매핑되는 형태로 저장된다.
sequence는 id를 담을 필드이다.
 
비즈니스 요구사항에서, 회원 id(id)와 이름(name)이 필요하다고 했다.
id는 시스템 입장에서 회원을 구분하는 값이고, 사용자가 입력하는 값이 아니다.
name이 사용자가 입력하는 값이다. 사용자는 name만 사용하고 id는 알 수 없다.
 
sequence필드는 이 id값을 부여하기 위한 필드인 것이다.
 
 

save 메소드 구현

 
save메소드이다.
먼저 Member객체를 매개변수로 받으며, sequence값을 Member객체의 id로 셋팅한다.
++가 붙어 있으므로, 회원이 추가될 때마다 id값은 1씩 증가하게 되며 id가 겹치는 일은 없을 것이다.
그리고 id가 셋팅된 Member 객체를 store에 저장해 준다.
마지막으로 Member 객체를 리턴한다.
 
요약해서, 회원을 등록하는 메소드이다.
 
 

findById 메소드 구현

 
findById 메소드이다.
먼저 id를 매개변수로 입력받고, store에서 id에 해당하는 객체(회원, Member객체)를 반환한다.
단, Optional.ofNullable이 사용되었기 때문에 만약 id에 해당하는 객체가 없다면(null 이라면),
null을 그대로 반환하는 것이 아닌 Optional로 감싸서(래핑되어) 명시적으로 처리할 수 있게 해준다.
 
요약해서, id에 해당하는 회원을 찾는 메소드이다.
 
 

findByName 메소드 구현

 
findByName 메소드이다.
 
먼저 name을 매개변수로 받으며, store에서 name과 일치하는 객체를 반환한다.
store.values().stream() 부분은, store에 있는 값들을 스트림 형식으로 사용하겠다는 것이다. 
예를 들어 1, 2, 3, 4 이런식으로 있으면 이것들을 차례로 아래쪽 필터구문에 대입한다는 것이다.( 반복문과 비슷함 )
 
filter 부분은, 입력받은 name과 일치하는 객체만을 스트림에 남기겠다는 뜻이다.
findAny 부분은, 그렇게 필터링되어 남은 객체중 한개를 반환한다는 뜻이다.
 
고로, name과 일치하는 객체가 있으면 그것을 반환하는 것이고 만약 없다면 null을 반환하게 된다.
물론 여기서의 null도 Optional로 래핑되어 반환되게 된다.
 
요약해서, name에 해당하는 회원을 찾는 메소드이다.
 
 

findAll 메소드 구현

 
마지막 findAll 메소드이다.
 
반환형이 List이므로, 배열 객체를 생성하여 반환해준다.
store의 값들을 배열 형태로 만들어 전부 반환해 주는 것이다.
 
요약해서, 회원목록을 볼 수 있는 메소드이다.
 
아래는 완성된 코드이다.
 

1

 

2

 
 
오늘은 이렇게 비즈니스 요구사항에 따른 도메인과 리포지토리를 만들어 보았다.
Member 도메인
MemberRepository 리포지토리(인터페이스)
MemoryMemberRepository 리포지토리(인터페이스 구현 클래스)
 
다음 시간엔 이것이 제대로 동작하는지 확인할 테스트 케이스를 작성해 보겠다.

728x90
반응형