본문 바로가기
Server/Spring

회원관리 - 백엔드 개발) 1. 회원 도메인과 Repository 만들기

by print_soo 2024. 8. 24.

1. 도메인 만들기

💡 도메인이란, 애플리케이션이 다루는 비즈니스 문제 영역과 그 영역을 표현하는 객체들을 의미한다.

 

파일위치: src/main/java/만든 파일명/domain(직접 만들어야하는 패키지)/Member

 

[Member.java]

 

package section4.section4_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;
    }
}

 

 

2. Repository만들기

💡 Repository란, 데이터를 저장하고 조회하는 역할을 하는 계층을 의미한다. Repository는 주로 데이터베이스와 상호작용하며, 도메인 객체를 저장하거나, 수정하거나, 삭제하거나, 조회하는 기능을 제공한다.

 

파일 위치: src/main/java/만든 파일명/repository(직접 만들어야하는 패키지)/MemberRepository

 

[MemberRepository.java] 이 파일은 인터페이스로 일종의 계약서이다. (현재는 DB에 연결하지 않았지만 추후에 연결할 수 있기에 인터페이스로 작업한다.)

 

package section4.section4_spring.repository;

import section4.section4_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(); //모든 회원 조회

}

 

파일 위치: src/main/java/만든 파일명/repository(직접 만들어야하는 패키지)/MemoryMemberRepository

 

[MemoryMemberRepository.java]

 

package section4.section4_spring.repository;

import section4.section4_spring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository {

    private static Map<Long, Member> store = new HashMap<>(); //중복, 순서없는 (키, 값) 자료구조
    private static long sequence = 0L; //long 타입의 수

    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member); //멤버의 아이디와 멤버객체를 store 해쉬맵에 저장
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id)); //null이 나올 수 있기에 옵셔널로 감싸고 아이디 찾는 로직 실행
    }

    @Override
    public Optional<Member> findByname(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name)) 
                //멤버를 매개변수로 넘겨 member.getName()한 값과 메소드로 받은 name이 같은지 확인
                .findAny();//하나라도 있는지 확인
    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values()); //store에 저장된 모든 값을 ArrayList 형태로 반환
    }

    //기존에 저장소에 있던 데이터 모두 삭제 - 테스트를 위해 작성
    public void clearStore(){
        store.clear();
    }