inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

496

ssisaaas

작성한 질문수 2

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 객체로 들어가게 되는건가요..??

 

 

 

 

 

 

 




java spring mvc spring-boot

답변 1

1

OMG

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

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

 

감사합니다.

0

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을 주면 되는거 아닌지..ㅠㅠ 헷갈립니다

0

OMG

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

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

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

만약 key로 id,

value로 name만 했다면

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

 

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

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

image

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

0

ssisaaas

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


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

..

0

76

2

Unused property.....

0

101

2

project JDK is misconfigured

0

132

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

83

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

230

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

104

2

윈도우 build test오류 질문

1

102

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

101

2

테스트 실행 시 에러 질문

0

292

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

129

1

윈도우 gradlew.bat 에러

0

167

1

@PostMapping("/members/new")가 동작하지 않습니다

0

89

1

java static class와 kotlin class

0

79

1

스프링 DB연결

0

126

1

소요 시간

0

87

2

ddl.sql에 빨간 밑줄

1

102

2

welcome page 에러

0

183

3

잘 모르겠습니다.

0

164

2

fail을 똑같이 쳤는데 오류가 발생해요

0

156

2

index.html Welcome page

0

124

1

프로젝트 gradle-groovy ?

0

369

1

테스트코드 메서드명 한글

0

202

2