* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC)
회원 도메인 생성
도메인 : 비즈니스 도메인 객체(회원)
1. hello.hellospring/domain (package 생성)
2. domain/Member (Class 생성)
[Member.java 소스코드]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hello.hellospring.domain; | |
import javax.persistence.Entity; | |
import javax.persistence.GeneratedValue; | |
import javax.persistence.GenerationType; | |
import javax.persistence.Id; | |
@Entity | |
public class Member { | |
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) | |
private long id; // data 구분을 위해 system이 생성하는 id | |
private String name; | |
public long getId() { | |
return id; | |
} | |
public void setId(long id) { | |
this.id = id; | |
} | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
} |
- 회원은 id와 name을 가지기 때문에 id, name 변수를 만들어준다
- id, name에 각각에 대한 getter/setter을 만들어준다
회원 레포지토리 인터페이스 생성
레포지토리 : DB에 접근. 도메인 객체를 DB에 저장하고 관리. 아직 DB를 선정하지 못했으므로 interface로 만들어 놓고 나중에 갈아끼운다
1. hello.hellospring/repository (package 생성)
2. repository/MemberRepository (interface 생성)
[MemberRepository.java 소스코드]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hello.hellospring.repository; | |
import hello.hellospring.domain.Member; | |
import java.util.List; | |
import java.util.Optional; | |
public interface MemberRepository { | |
Member save(Member member); | |
Optional<Member> findById(Long id); | |
Optional<Member> findByName(String name); | |
List<Member> findAll(); | |
} |
- 구현해야 할 기능을 적어준다
- save() : 회원 저장.
- findById() : 회원 id를 통해 회원 검색
- findByName() : name을 통해 회원 검색
- findAll() : 전체 회원 검색
- Optional : id, name을 통해 회원을 검색할 때, 해당하는 회원이 없을 수 있다(null) -> 이것을 처리하기위해 사용(java8)
회원 레포지토리 구현체 생성(메모리)
1. hello.hellospring/repository/MemoryMemberRepository
[MemoryMemberRepository.java 소스코드]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hello.hellospring.repository; | |
import hello.hellospring.domain.Member; | |
import org.springframework.stereotype.Repository; | |
import java.util.*; | |
public class MemoryMemberRepository implements MemberRepository{ | |
private static Map<Long, Member> store = new HashMap<>(); | |
private static long sequence = 0L; // 0, 1, 2, ... 생성해준다 | |
@Override | |
public Member save(Member member) { // Member 저장 시 name은 사용자가 입력한 값으로 넘어오고, id는 여기서 생성 | |
member.setId(++sequence); // sequence 값을 증가시켜 회원의 id로 넣어준다 | |
store.put(member.getId(), member); // Map에 member 정보 저장 | |
return member; | |
} | |
@Override | |
public Optional<Member> findById(Long id) { | |
return Optional.ofNullable(store.get(id)); // store에서 id를 찾아서 반환(null일 때를 대비하여 Optional.ofNullable로 감싸준다 | |
} | |
@Override | |
public Optional<Member> findByName(String name) { | |
return store.values().stream() // loop 돌리는 것 | |
.filter(member -> member.getName().equals(name)) // lambda 사용. member.getName이 input name과 같은지 확인 | |
.findAny(); // 찾으면 반환 | |
} | |
@Override | |
public List<Member> findAll() { | |
return new ArrayList<>(store.values()); // store의 values는 member | |
} | |
public void clearStore() { | |
store.clear(); | |
} | |
} |
- implements MemberRepository 후 alt + insert 단축키로 구현해야 할 method 전체 가져오기
- 회원 정보를 저장해줄 Map 생성(동시성 문제가 있지만 현재는 그냥 진행)
- 회원 id는 입력받는게 아니라 자동으로 생성되게 할것이므로 long type sequence 변수 선언
- 여기서의 clearStore()함수는 테스트시에 필요한 함수
save()
- member 저장시 sequence를 증가시켜서 id로 설정(현재 member의 이름은 입력받은 값으로 설정 되어있음)
- store(Map)에 회원정보 저장후 member 객체 return
'개발 > Spring' 카테고리의 다른 글
[스프링 입문] 스프링 회원관리 예제 - 4. 회원 서비스 개발 및 테스트 (0) | 2021.06.29 |
---|---|
[스프링 입문] 스프링 회원관리 예제 - 3. 회원 레포지토리 테스트 케이스 작성 (0) | 2021.06.29 |
[스프링 입문] 스프링 회원관리 예제 - 1. 비즈니스 요구사항 정리 (0) | 2021.06.29 |
[스프링 입문] 스프링 정적컨텐츠, MVC, API (0) | 2021.06.29 |
[스프링 입문] 스프링 빌드하고 실행하기 (0) | 2021.06.29 |