ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring 완전정복 - 2 / 서비스 개발(회원 정보)
    Spring(Web) 2022. 4. 19. 18:47

    기본적인 회원 정보를 받아, 저장/관리해주는 서비스를 개발해보기.

    회원 정보는 간단하게
    id : 서버에서 지정해주는 고유한 id로, sequence 형태로 차례대로 부여함.
    name : 사용자 이름
    과 같은 형태로 정의했다.

      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;
          }
      }

    이제 이 회원 정보를 관리하는 부분을 구현해야 하는데, 해당 강의에서는 DB가 정해지지 않은 상태를 전제로 진행되었기 때문에
    인터페이스 -> 클래스에서 상속받아 구현
    하는 형태로 진행했다.

    MemberRepository 인터페이스

      package hello.hellospring.repository;
    
      import hello.hellospring.domain.Member;
    
      import java.util.List;
      import java.util.Optional;
    
      public interface MemberRepository {
          Member save(Member member);
          Optional<Member> findById(Long id);
          Optional<Member> findByName(String name);
          List<Member> findAll();
      }
    

    MemoryMemberRepository

    package hello.hellospring.repository;
    
    import hello.hellospring.domain.Member;
    
    import java.util.*;
    
    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();
        }
    }

    특이한 부분이 있다면, HashMap에서는 기본적으로 Key에의해 value를 찾는 구조이므로 value를 이용해 해당 객체를 찾으려면 모든 value를 돌며 찾아내야 한다.
    따라서 lambda를 이용해 name이 같은 객체를 찾아내는 방식으로 구현했다.

    마지막에 보이는 clearStore 메소드는, 테스트 코드에서 사용하기위해 구현한 내용.

    따로 어려운 내용은 없었고, 디렉터리 구조를 깔끔하게 정리하며 구현하는걸 알게되었다.

     

    중요한 부분은,

    domain -> 멤버의 정보를 갖고있음.(한 명)

    repository -> 모든 멤버들의 정보를 가지고 있으며, 관리.

    service -> repository를 이용해 새로운 멤버를 추가하것과 같은 실제 서비스를 실행하는 역할.

Designed by Tistory.