비즈니스 요구사항 정리

2023. 5. 1. 03:49카테고리 없음

구조

도메인 : 비즈니스 도메인 객체 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨

컨트롤러 : 웹 MVC의 컨트롤러 역할

서비스 : 핵심 비즈니스 로직 구현

레퍼지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리

클래스 의존 관계

MemberService -> MemberRepository <- MemoryMemberRepository

 

멤버 클래스

ㅍ회원가입을 할 때 필요한 정보들의 변수를 입력받기 위한 작업

 

 

레퍼지토리

 

정보들을 저장하고 관리 할&nbsp; 수 있는 곳.

아까 위에 Member클래스의 있는 id와 name을 쓸 수 있도록 import를 해준다. 그리고 Optional을 사용해서 null값을 나올 것을 방지하여 Optional로 감싸서 가져올수있도록 하는거고, List는 지금까지 저장된 모든 객체들을 가져오는 것을 뜻한다.

메모리멤버레퍼지토리

 

package com.example.demo.Repository;

import com.example.demo.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();
    }
}

위 코드는 인터페이스인 멤버레퍼지토리를 상속받아서 클래스의 형태로 만들어 기본적인 기능을 하나씩 만들어갈수

있게 되는 것이다. map을 써서 멤버의 정보를 저장 할 곳을 만들어주기 위하여 HashMap을 써주고, sequence는 map에서 사용되는 Key값들을 만들어주는 함수라고 생각하면 된다. 

save() : member에 있는 name과 id가 있는데 name과 id를 입력을 하면 store에 그 아이디를 저장(Map에)을 하게 된다.

findById() :  id를 입력했을때 이제 그 값을 입력 받을텐데, 그 값이 만약 null인 상태로 나올수 있으니 그 가능성도 배제하지 않게 하기 위해 Optional이라는 함수를 사용해서 반환될수 있게끔 만들어주었다.

findByname() : 여기에는 사람의 실제 이름이 들어오는 곳이기 때문에, 스트림 함수로 그 배열에서 어떤 것들의 값을 필터링을 하든 만져주기 위해서 stream을 쓰고, filter로 멤버에서 입력받은 이름과 매개변수로 넘어온 이곳의 이름과 같은지, 그리고 그 이름이 같다면 필터링이 되고, 그 값을 찾으면 반환해주기 위해 return이 제일 앞에 나온 것을 볼 수 있다.

findAll(): 우리가 처음에 배열을 쓸땐 map으로 했는데 지금 findAll을 보게 되면 List로 받았다. 그리고 그 안에 ArrayList를 사용하여 store.values, store에 저장된 value, 즉, member를 뜻하는데 이 값들을 나타내는 것이다.