spring boot (3) feat.김영한

BAO.DE·2024년 7월 2일

Springboot

목록 보기
4/5

비즈니스 요구사항 정의 ( 회원관리)

데이터 : 회원 ID , 이름
기능 : CRUD
DBMS 선정 x ( 가상의 시나리오 NoSQL , RDBMS .. etc)
-> 초기단계는 가벼운 메모리 기반의 데이터 저장소를 사용

회원 도메인 & 레포지토리

Member class 

package com.example.hellospring.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;
	}
	

}
인터페이스 설계
package com.example.hellospring.repositroy;

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

import com.example.hellospring.domain.Member;

public interface MemberRepositroy {
	
	/* 기능목록  */
	
	Member Save(Member member);  
	Optional<Member> findId(Long id); 
	Optional<Member> findName(String name);
	List<Member>findAll();

	/*
	 * Optional은 주로 "결과 없음"을 표시해야 하는 명확한 필요성이 있고 null을 사용하면 오류가 발생할 가능성이 있는 경우 메서드 반환 유형으로 사용하기 위한 것입니다. 
	 * 유형이 Optional인 변수는 그 자체가 null이 되어서는 안 됩니다. 
	 * 항상 Optional 인스턴스를 가리켜야 합니다.
	 * 
	 * 
	 */

}

interface Implements

package com.example.hellospring.repositroy;

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


import com.example.hellospring.domain.Member;

public class MemoryMemberRepository implements MemberRepositroy {
	
	private Map<Long, Member> store = new HashMap<>();
	private static long sequence  = 0L;

	@Override
	public Member Save(Member member) {
		member.setId(++sequence); // Seq id 1씩 증가 
		store.put(member.getId(), member);
		
		return member;
	}

	@Override
	public Optional<Member> findId(Long id) {
		
		return Optional.ofNullable(store.get(id));  // null이어도 감쌀 수 있음 
	}

	@Override
	public Optional<Member> findName(String name) {
		
		return
		store.values().stream()
		.filter(Member -> Member.getName().equals(name)) // getName을 통해 동일한 이름 찾음 
		.findAny(); // loop다 돌았는데 null이 포함되어서 반환
		
		
							 
	}

	@Override
	public List<Member> findAll() {
		// Map to List 
		return new ArrayList<>(store.values());
		
	}

}

테스트 케이스 (Junit)

Junit file name은 관례적으로 구현부 class +Tests 로 작성한다.

Save Test (True)

findByName ( True )

findByName ( False )

0개의 댓글