Spring - 6

CYSSSSSSSSS·2024년 4월 13일

스프링

목록 보기
6/16

Spring

회원 관리 개발

비즈니스 요구사항 정리

  • 데이터 : 회원ID , 이름
  • 기능 : 회원 등록 , 조회
  • 데이터 저장소가 선정되지 않음

  • 컨트롤러 : 웹 MVC에 컨트롤러 역할
  • 서비스 : 핵심 비즈니스 로직 구현
  • 리포지토리 : 데이터베이스에 접근 , 도메인 객체를 DB에 저장하고 관리
  • 도메인 : 비즈니스 도메인 객체 (ex) 회원 주문 , 쿠폰 등등 데이터베이스에 저장하고 관리)

  • MemberService : 회원 비즈니스 로직을 수행하는 서비스
  • MemberRepository : 회원을 저장하는 구조는 인터페이스로 한다.(나중에 JDBC
  • MemoryMemberRespository : 회원을 저장할 수 있는 구현체로 만든다.(메모리)

member 도메인 만들기

package Portfolio.PortfolioSpring.domain;

public class Member {
    private Long id; // 회원 id
    private String name; //회원 이름

    public String getName() {
        return name;
    }

    public Long getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setId(Long id) {
        this.id = id;
    }
}
  • 회원 id 와 회원 이름을 주요 데이터로 get과 set 함수를 써 정보 은닉과 캡슐화를 해줘야 한다.

memberrepository

package Portfolio.PortfolioSpring.repository;

import Portfolio.PortfolioSpring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRespository {
    Member save(Member member); //  회원 ID 저장
    // Optional : NullPointException을 방지하기 위해 값이 null 이더라도 에러가 발생하지 않게 해준다.
    Optional<Member> findById(Long id); // 회원 id로 회원 정보를 찾는다.
    Optional<Member> findByName(String name); //  회원 이름으로 회원 정보를 찾는다
    List<Member> findAll(); // 모든 회원 정보 리스트 반환
}
  • 인터페이스로 구현하기 때문에 실제 필요한 오버라이딩에 필요한 함수들을 정의해준다.
  • Optional 클래스를 사용하여 NPE 에러를 방지하는 것이 좋다.

MemoryMemberRepository

package Portfolio.PortfolioSpring.repository;

import Portfolio.PortfolioSpring.domain.Member;

import java.util.*;

public class memoryMemberRepository implements MemberRespository {

    // save를 할때 저장할 공간을 만들기
    private static Map<Long , Member> store = new HashMap<>();
    private static long sequence = 0L;  //  save 할때 key를 생성해주기
    @Override
    public Member save(Member member) {
        member.setId(++sequence);           // id를 세팅하고
        store.put(member.getId() , member); // store에 저장
        return member;      // 결과 반환
    }

    @Override
    public Optional<Member> findById(Long id) {
        // id로 정보를 찾을때는 id값을 key로 get 함수를 부르면 된다(map)
        return  Optional.ofNullable(store.get(id)); // null이 의심된다고 생각하면 Optional.ofNullable을 감싸면 된다.
    }

    @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()); // store에 있는 값들만 ArrayList를 사용하여 반환
    }
}
  • 나중에 변경하기 때문에 Map을 이용하여 key와 value로 관리해서 사용한다.
  • 특히 회원 정보를 찾을때 null로 의심된다면 Optional 클래스에있는 함수인 ofNullable을 사용하면 된다.
  • 일치 여부는 map값과 매개변수 값을 비교하여 맞는값을 리턴해주면 된다.
profile
개발자 되고 싶어요

0개의 댓글