인프런 커뮤니티 질문&답변

ssisaaas님의 프로필 이미지
ssisaaas

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

private static Map<Long, Member> store = new HashMap<>(); 코드 이해가 안가요

해결된 질문

작성

·

417

1


Member.java

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;
    }
}

 

MemoryMemberRepository.java

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

1

안녕하세요. ssisaaas님, 공식 서포터즈 OMG입니다.

동일한 질문에 대해 이해하기 쉬운 예시를 들어 설명드린 답변이 있어 링크(클릭) 참고해주세요 ^^

 

감사합니다.

ssisaaas님의 프로필 이미지
ssisaaas
질문자

글 보고도 잘 이해가 안가서 댓글 남깁니다 ㅠㅠ

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

Member이 Member 객체만 들어올 수 있어서 member 필드인 Long id, String name 필드 두 개 다 사용 가능하니까 Member로 넣은거면
Map<Member, Member>도 되지않나요..? Long id가 있으니까 key값으로 id를 주고 value값으로 name을 주면 되는거 아닌지..ㅠㅠ 헷갈립니다

Map을 아신다는 가정으로 설명드리면,

key로 id(몇번째 사람인지)

value로 Member(사람 그 자체 정보=> 이름뿐만 아니라, 나이, 성별 심지어 id까지 알 수 있는)를 부여하여 Member의 모든 정보를 알기 위해 key는 id이고, value를 Member로 한것입니다.

만약 key로 id,

value로 name만 했다면

id로 접근해서 얻을 수 있는 정보는 name밖에 저장하고 확인할 수 밖에 없는 구조입니다.

 

아래에서 첫번째 구조를 보면 key(id)로 Member 자체의 정보를 갖고 있기 때문에 Member의 id, 이름, 성별, 나이 등에 대한 정보를 관리하고 조회할 수 있지만,

두번째 구조에서는 id로 이름밖에 알 수 없습니다.

image

부연 설명이 필요하면 댓글 남겨주세요 :)

ssisaaas님의 프로필 이미지
ssisaaas
질문자

앗 ! 그럼 제가 이해한게 맞았었네요 ..!!


"어차피 id값은 key값으로 조회가 가능한데 왜 굳이 value에서도 id를 조회가능하게 만들어야하지 ?" 라고 생각했었어서 아리송 했었던것같아요..ㅠㅠ 감사합니다

ssisaaas님의 프로필 이미지
ssisaaas

작성한 질문수

질문하기