Spring 입문강의 05

HOHO·2023년 4월 14일

Spring

목록 보기
12/15

회원 도메인과 repository 만들기

Member domain

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

회원정보 저장


MemberRepository 인터페이스

package hello.hellospring.repository;
import java.util.List;
import java.util.Optional;
import hello.hellospring.domain.Member;

public interface MemberRepository {
	Member save(Member member);//저장된 회원 반환
	Optional<Member> findById(Long id);//id로 회원을 찾는다
	Optional<Member> findById(String name);//name으로 찾기
	//null 반환이 가능한 방법중에 하나 -> Optional<Member>
	List<Member> findAll();//모든 회원리스트 반환
}

MemoryMemberRepository 구현클래스

//동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
package hello.hellospring.repository;
//구현체클래스
public class MemoryMemberRepository implements MemberRepository {

	private static Map<Long, Member> store = new HashMap<>();
	private static long sequence = 0L; //0,1,2 같은 key값 생성
	
	@Override
	public Member save(Member member) {
		member.setId(++sequence);
		store.put(member.getId(), member);
		return member;
	}
	@Override
    @Override
    @Override

GPT형님께 여쭤보고 나서 내 모자란 머리로 이해 비스무리하게 해보자

private static Map<Long, Member> store = new HashMap<>();

  • Map은 키-값(key-value) 쌍으로 이루어진 자료구조
  • Long타입의 key로 Member객체를 저장한다
  • store 필드는 HashMap으로 초기화(HashMap은 Map의 구현 클래스 중 하나)
  • HashMap은 null을 포함한 모든 객체를 저장할 수 있으며, put 메소드를 이용하여 키와 값으로 이루어진 쌍을 저장하고, get 메소드를 이용하여 저장된 값을 조회

강의에서는 sequence 변수를 store변수의 key값으로 사용 하는것같다

  • Member save()메소드에서 회원을 save할때마다 sequence(key)값을 증가시켜주고 member객체의 id에 sequence값을 할당, store에 id와 member를 저장하고 return member

나머지 @Override

	@Override
	public Optional<Member> findById(Long id) {
		// TODO Auto-generated method stub
		return Optional.ofNullable(store.get(id));
		//값이 아무것도 안들어올경우 (ex: null) Optional.ofNullable로 감싸면 된다
	}

	@Override
	public Optional<Member> findById(String name) {
		//루프를 돌리는것이래
		return store.values().stream()
				.filter(member -> member.getName().equals(name))
				.findAny();
		 //member.getName()이 파라미터로 넘어온 name이랑 같은지 확인하는것
		//name이 같으면 .filter이 되는것이고 같은걸 하나라도 찾으면 .findAny()
		//결과가 Optional로 반환
	}

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

오우 진짜 어렵다 람다식이나 Stream API는 사실 배우지도않았다

GPT의 분석

  • Map의 값들 중에서 name 값이 일치하는 Member 객체를 찾는 코드입니다.
  • 해당 코드에서는 Stream API를 사용하여 Map의 값들을 순회하고, filter() 메소드를 이용해 name 값이 일치하는 Member 객체만 걸러냅니다. 그리고 마지막으로 findAny() 메소드를 호출하여 걸러낸 객체 중 임의의 하나를 반환합니다.
  • 따라서 위 코드를 실행하면 name 값이 일치하는 Member 객체를 하나 반환하게 됩니다. 만약 일치하는 Member 객체가 없다면 빈 Optional 객체가 반환

근데 강의하는 김영한님 개멋져보여 진짜

profile
기계 그잡채가 되고싶다

0개의 댓글