본문 바로가기
Back End/Spring

Spring - 회원관리예제 (회원 도메인과 레포지토리)

by SolaKim 2023. 7. 4.

회원 객체 (./domain/Member.java)

package hello.hellospring.domain;
public class Member {
    private Long 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;
    }
}

회원 리포지토리 인터페이스 (./repository/MemberRopository.java)

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    //save를 하면 멤버가 저장소에 저장됨
    Member save(Member member);

    //findById, findByName 을 통해서 찾아올 수 있음
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);

    //지금까지 저장된 모든 회원리스트를 반환해줌
    List<Member> findAll();

}

회원 리포지토리 메모리 구현체 (./repository/MemoryMemberRopository.java)

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.stereotype.Repository;

import java.util.*;


//@Repository 
//implements를 이용해서 인터페이스를 불러들인다.
public class MemoryMemberRepository implements MemberRepository{
    //이 맵과 해쉬맵은 뭐지...?
    private static Map<Long, Member> store = new HashMap<>();
    //sequence는 key 값을 생성해주는 역할
    private static long sequece = 0L;

    @Override
    public Member save(Member member) {
        member.setId(++sequece); //멤버 한명이 추가되면 아이디 값을 하나씩 올려준다.
        store.put(member.getId(), member); //store에다가 넣어준다.
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        //찾는 아이디 값이 null 값이더라도 옵셔널로 감싸서 전달한다.
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        // 이건 자바의 람다식인데, stream()은 람다식을 활용할 수 있는 기술 중 하나로써 loop를 돌린다.
        //filter를 이용한다. 맵에 저장되어 있는 정보를 하나씩 흐름대로(stream) 도는데,
        // 찾는 name이 나타나면 걔를 반환하고, 끝까지 돌렸는데 없으면, 옵셔널에서 널값을 감싸서 반환한다.
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

    //메모리 초기화 코드
    public void clearStore(){
        store.clear();
    }
}

 

코드 출처 : 김영한님의 스프링 입문