It won't hurt to try

[스프링 입문]10.회원 도메인과 리포지토리 만들기 본문

JAVA/스프링 입문

[스프링 입문]10.회원 도메인과 리포지토리 만들기

yongki.doki 2021. 8. 1. 21:50

디렉토리 구조

아직은 적응이 안되는 디렉토리 구조이다.

 

controller

  • 웹어플리케이션 서버로부터 신호가 전달되어 오는 곳

domain

  •   저장소에 데이터를 저장하기 위한 오브젝트라고 생각하면 쉬울것 같다.
  •   우리가 흔히 말하는 getter/setter구조로 되어있는 경우가 많다.

repository

  •   저장소의 데이터를 CRUD하기 위한 처리 내용이 들어간다.
     (예를 들면 데이터 저장, 수정, 열람 등)
  •   우리는 아직 어떠한 저장소를 사용할지 정해지지 않았기 때문에 일단 인터페이스를 구현하는 방식으로 한다.

 

 

 

소스 살펴보기

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository {

    // 실무에서는 동시성문제(멀티쓰레드)로 ConcurrentHashMap을 사용하는 경우가 많다.
    private static Map<Long, Member> store = new HashMap<>();
    // 실무에서는 동시성문제(멀티쓰레드)로 AtomicLong을 사용하는 경우가 많다.
    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());
    }
}

 - Optional : swift공부할 때 익혔던 개념이라서 친숙했다. java의 경우는 8버젼부터 사용되고 있다고 한다. 값에 null이 올경우가 있을때 사용한다. return할때 Optional.ofNullable을 사용한다.

 

300x250
300x250
Comments