import문 생략

public class MemoryMemberRepositoryTest{
	MemoryMemberRepository repository = new MemoryMemberRepository();
    
    @AfterEach
    public void afterEach(){
    repository.clearStore();
    }
    @Test
    public void save(){
    Member member = new Member();
    member.setName("spring");
    
    repository.save(member);
    Member result = repository.findById(member.getId()).get();
    Assertions.assertEquals(member,result);
    Assertions.assertThat(member).isEqualsTo(result);
    }
    @Test
    public void findByName(){
    Member member1 = new Member();
    member1.setName("spring1");
    repository.save(member1);
    
    Member member2 = new Member();
    member2.setName("spring2");
    repository.save(member2);
    
    Member result = repository.findByName("spring").get();
    
    org.assertj.core.api.Assertions.assertThat(result).isEqualTo(member1);
    }
    @Test
    public void findAll(){
    Member member1 = new Member();
    member1.setName("spring1");
    repository.save(member1);
    
    Member member2 = new Member();
    member2.setName("spring2");
    repository.save(member2);
    
    List<Member> result = repository.findAll();
    org.assertj.core.api.Assertions.assertThat(result.size()).isEqualsTo(2);
    }
}

AfterEach -> 한 메소드가 끝나면 clearStore 로 자원정리, 하지 않는다면 spring문자열이 충돌
save 메소드 -> Member 객체를 만들어서 spring 문자열 입력,
repository객체로 save 메소드에 member 전달
repository 객체로 이동, findById 메소드로 member에 저장된 id 반환, -> 자료형 Optional<멤버> -> get()으로 멤버만 뽑아옴
Assertions.assertEquals 로 두개의 인자를 비교,
맞으면 다음 로직 실행, 틀리면 오류, 로직 종료

import 생략

public interface MemberRepository{
	Member save(Member member);
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();
}

추상 메소드로 상속받는 클래스가 메소드들 오버라이딩 되게 함

import 생략

public class MemoryMemberRepository implements MemberRepository{
	private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;
    
    @override
    public Member save(Member member){
    member.setId(++sequence);
    store.put(member.getId(),member);
    return member;
    }
    @Override
    public Optional<Member> findById(Long id){
    return Optional.ofNullable(store.get(id))
    }
    @Override
    public Optional<Member> findByName(String 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();
    }
}
profile
건물주가 되는 그날까지

0개의 댓글