해결된 질문
작성
·
417
1
package Hello.hellospring.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
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 Hello.hellospring.repository;
import Hello.hellospring.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();
}
}
MemoryMemberReposirory.java 코드에서
private static Map<Long, Member> store = new HashMap<>(); 부분이 이해가 가질 않습니다..
ㅠㅠ Map으로 <키 , 값>을 받으려고 하는것까진 알겠는데 왜 키는 id의 데이터타입인 Long으로 들어가는데 값은 name의 데이터타입인 String으로 들어가는것이 아닌 Member 객체로 들어가게 되는건가요..??
답변 1
Map을 아신다는 가정으로 설명드리면,
key로 id(몇번째 사람인지)
value로 Member(사람 그 자체 정보=> 이름뿐만 아니라, 나이, 성별 심지어 id까지 알 수 있는)를 부여하여 Member의 모든 정보를 알기 위해 key는 id이고, value를 Member로 한것입니다.
만약 key로 id,
value로 name만 했다면
id로 접근해서 얻을 수 있는 정보는 name밖에 저장하고 확인할 수 밖에 없는 구조입니다.
아래에서 첫번째 구조를 보면 key(id)로 Member 자체의 정보를 갖고 있기 때문에 Member의 id, 이름, 성별, 나이 등에 대한 정보를 관리하고 조회할 수 있지만,
두번째 구조에서는 id로 이름밖에 알 수 없습니다.
부연 설명이 필요하면 댓글 남겨주세요 :)
앗 ! 그럼 제가 이해한게 맞았었네요 ..!!
"어차피 id값은 key값으로 조회가 가능한데 왜 굳이 value에서도 id를 조회가능하게 만들어야하지 ?" 라고 생각했었어서 아리송 했었던것같아요..ㅠㅠ 감사합니다
글 보고도 잘 이해가 안가서 댓글 남깁니다 ㅠㅠ
Member이 Member 객체만 들어올 수 있어서 member 필드인 Long id, String name 필드 두 개 다 사용 가능하니까 Member로 넣은거면
Map<Member, Member>도 되지않나요..? Long id가 있으니까 key값으로 id를 주고 value값으로 name을 주면 되는거 아닌지..ㅠㅠ 헷갈립니다