From aab81cebd55f744c87e6e9a27e2f68bc16fb556f Mon Sep 17 00:00:00 2001 From: haerong22 Date: Wed, 31 Mar 2021 23:18:02 +0900 Subject: [PATCH] =?UTF-8?q?spring=20mvc=20:=20servlet,=20jsp,=20mvc=20patt?= =?UTF-8?q?ern=20-=20=ED=9A=8C=EC=9B=90=20=EA=B4=80=EB=A6=AC=20=EC=9B=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/servlet/domain/member/Member.java | 20 ++++++++ .../domain/member/MemberRepository.java | 40 ++++++++++++++++ .../domain/member/MemberRepositoryTest.java | 47 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/Member.java create mode 100644 spring-mvc/servlet/src/main/java/com/example/servlet/domain/member/MemberRepository.java create mode 100644 spring-mvc/servlet/src/test/java/com/example/servlet/domain/member/MemberRepositoryTest.java 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