Spring

STEP3 회원 리포지토리 메모리 구현체 생성

chandlerxx 2023. 11. 6. 19:11

*인프런 강의 중 일부 예제 코드를 발췌하였으며, 주석을 통해 학습 이해도를 높이는 방향으로 스터디하고 있습니다.

.

 

설계한 인터페이스를 활용하여 구현체(데이터 저장소)를 직접 생성해봅니다.

 

1. MemoryMemberRepository


 

import domain.Member;
import java.util.*;

public class MemoryMemberRepository implements MemberRepository {

    // map : 리스트/배열을 순차적으로 요소의 값을 구하는게 아니라 key-value 얻기 위함
    // Key : id
    // Value : Member (필드 확장 고려한 member 객체 인스턴스) ★★
    private static Map<Long, Member> store = new HashMap<>();

    // key값 생성
    private static long sequence = 0L;

    // interface 구현
    @Override
    public Member save(Member member) { // 저장
        // id 셋팅
        member.setId(++sequence);

        // put 메서드를 이용하여 key, value 값 추가
        // value - member instance
        store.put(member.getId(), member);

        // value - member instance (필요한 데이터 반환)
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        // 실무에서 주로 null-safe로 return
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
    	// 루프문 대신 stream 처리
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        // 자바에서 실무할때 list를 많이 쓴다
        return new ArrayList<>(store.values());
    }
	// 테스트 코드 작성시 필요한 부분
    public void clearStore() {
        store.clear();
    }
}

 

2. Stream 사용하는 이유


업데이트 예정

 

 

 

 

3. ArrayList 사용하는 이유


사이즈가 동적으로 할당되는 배열임.

 

 

 


[출처]