[SpringBoot] 회원 도메인과 레포지토리 만들기

DU·2024년 7월 16일

Spring Boot

목록 보기
1/4
post-thumbnail

Member 인터페이스입니다.

package hello.hello_spring.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;
    }
}

MemberRespository클래스 입니다.

package hello.hello_spring.repository;

import hello.hello_spring.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라는 클래스로, 회원 정보를 메모리에 저장하는 저장소(repository) 역할을 합니다. 이 클래스는 MemberRepository 인터페이스를 구현하고 있습니다.

package hello.hello_spring.repository;

import hello.hello_spring.domain.Member;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

// MemoryMemberRepository 클래스는 MemberRepository 인터페이스를 구현합니다.
public class MemoryMemberRepository implements MemberRepository {
    // 회원 정보를 저장하기 위한 Map을 선언합니다.
    // 키는 회원의 ID(Long 타입), 값은 회원(Member 객체)입니다.
    private static Map<Long, Member> store = new HashMap<>();
    // 회원의 ID를 자동으로 생성하기 위한 시퀀스를 선언합니다.
    private static long sequence = 0L;

    // 회원 정보를 저장하는 메서드입니다.
    @Override
    public Member save(Member member) {
        // 회원 객체의 ID를 시퀀스를 증가시켜 설정합니다.
        member.setId(++sequence);
        // Map에 회원 객체를 저장합니다. 키는 회원의 ID, 값은 회원 객체입니다.
        store.put(member.getId(), member);
        // 저장된 회원 객체를 반환합니다.
        return member;
    }

    // ID로 회원을 찾는 메서드입니다.
    @Override
    public Optional<Member> findById(Long id) {
        // Map에서 ID로 회원 객체를 찾아 반환합니다.
        // Optional.ofNullable을 사용하여 회원 객체가 없을 경우를 대비합니다.
        return Optional.ofNullable(store.get(id));
    }

    // 이름으로 회원을 찾는 메서드입니다.
    @Override
    public Optional<Member> findByName(String name) {
        // Map의 모든 값을 Stream으로 변환한 후 필터링을 통해 이름이 일치하는 회원을 찾습니다.
        // findAny는 일치하는 첫 번째 회원을 Optional로 반환합니다.
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    // 모든 회원 정보를 반환하는 메서드입니다.
    @Override
    public List<Member> findAll() {
        // Map의 모든 값을 ArrayList로 변환하여 반환합니다.
        return new ArrayList<>(store.values());
    }
}

이제 각 부분을 자세히 설명하겠습니다:

클래스 선언과 필드

public class MemoryMemberRepository implements MemberRepository {
    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;
}
  • MemoryMemberRepository 클래스는 MemberRepository 인터페이스를 구현합니다.
  • store는 회원 정보를 저장하기 위한 Map입니다. Long 타입의 키(ID)와 Member 객체를 값으로 저장합니다.
  • sequence는 회원의 ID를 자동으로 생성하기 위한 시퀀스입니다. 회원이 저장될 때마다 이 값이 증가합니다.

save 메서드

@Override
public Member save(Member member) {
    member.setId(++sequence);
    store.put(member.getId(), member);
    return member;
}
  • save 메서드는 새로운 회원을 저장합니다.
  • 회원 객체의 ID를 시퀀스를 증가시켜 설정합니다(member.setId(++sequence)).
  • store 맵에 회원 객체를 저장합니다. 키는 회원의 ID, 값은 회원 객체입니다(store.put(member.getId(), member)).
  • 저장된 회원 객체를 반환합니다.

findById 메서드

@Override
public Optional<Member> findById(Long id) {
    return Optional.ofNullable(store.get(id));
}
  • findById 메서드는 주어진 ID로 회원을 찾습니다.
  • store 맵에서 주어진 ID로 회원 객체를 찾아 반환합니다. 이때, Optional.ofNullable을 사용하여 회원 객체가 없을 경우를 대비합니다.

findByName 메서드

@Override
public Optional<Member> findByName(String name) {
    return store.values().stream()
            .filter(member -> member.getName().equals(name))
            .findAny();
}
  • findByName 메서드는 주어진 이름으로 회원을 찾습니다.
  • store 맵의 모든 값을 스트림으로 변환하고(store.values().stream()), 필터를 사용하여 이름이 일치하는 회원을 찾습니다(.filter(member -> member.getName().equals(name))).
  • findAny 메서드를 사용하여 일치하는 첫 번째 회원을 Optional로 반환합니다.

findAll 메서드

@Override
public List<Member> findAll() {
    return new ArrayList<>(store.values());
}
  • findAll 메서드는 모든 회원 정보를 반환합니다.
  • store 맵의 모든 값을 ArrayList로 변환하여 반환합니다.

이 클래스는 간단한 메모리 기반의 회원 저장소를 구현한 것으로, 데이터베이스와 같은 영구 저장소 대신 메모리에 데이터를 저장합니다. 예제에서는 간단하게 회원의 정보를 저장하고, 검색하고, 반환하는 기능을 제공합니다.

0개의 댓글