diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/Member.java b/spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/Member.java new file mode 100644 index 00000000..a9a426a2 --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/Member.java @@ -0,0 +1,20 @@ +package com.example.servlet.domain.member; + +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class Member { + + private Long id; + private String username; + private int age; + + public Member() { + } + + public Member(String username, int age) { + this.username = username; + this.age = age; + } +} diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/MemberRepository.java b/spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/MemberRepository.java new file mode 100644 index 00000000..3f13039a --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/MemberRepository.java @@ -0,0 +1,40 @@ +package com.example.servlet.domain.member; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MemberRepository { + // 동시성 문제 -> ConcurrentHashMap, AtomicLong 사용 + private static Map store = new HashMap<>(); + private static long sequence = 0L; + + // singleton + private static final MemberRepository instance = new MemberRepository(); + + public static MemberRepository getInstance() { + return instance; + } + + private MemberRepository() { + } + + public Member save(Member member) { + member.setId(++sequence); + store.put(member.getId(), member); + return member; + } + + public Member findById(Long id) { + return store.get(id); + } + + public List findAll() { + return new ArrayList<>(store.values()); + } + + public void clearStore() { + store.clear(); + } +} diff --git a/spring-mvc/servlet/src/test/java/com/example/servlet/domain/member/MemberRepositoryTest.java b/spring-mvc/servlet/src/test/java/com/example/servlet/domain/member/MemberRepositoryTest.java new file mode 100644 index 00000000..75ea58de --- /dev/null +++ b/spring-mvc/servlet/src/test/java/com/example/servlet/domain/member/MemberRepositoryTest.java @@ -0,0 +1,47 @@ +package com.example.servlet.domain.member; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +class MemberRepositoryTest { + + MemberRepository memberRepository = MemberRepository.getInstance(); + + @AfterEach + void afterEach() { + memberRepository.clearStore(); + } + + @Test + void save() throws Exception { + // given + Member member = new Member("hello", 20); + + // when + Member savedMember = memberRepository.save(member); + + // then + Member findMember = memberRepository.findById(savedMember.getId()); + Assertions.assertThat(findMember).isEqualTo(savedMember); + } + + @Test + void findAll() throws Exception { + // given + Member member1 = new Member("member1", 20); + Member member2 = new Member("member2", 30); + + memberRepository.save(member1); + memberRepository.save(member2); + + // when + List result = memberRepository.findAll(); + + // then + Assertions.assertThat(result.size()).isEqualTo(2); + Assertions.assertThat(result).contains(member1, member2); + } +} \ No newline at end of file