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

장진웅님의 프로필 이미지

작성한 질문수

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

회원 도메인과 리포지토리 만들기

MemberRepository { 질문이요

작성

·

164

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

안녕하세요 해당 부분에서 오류 발생되는데 왜 그런 걸까요

public class MemoryMemberRepository implements MemberRepository { 이부분에 빨간줄이 있습니다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
/**
 * 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
 */
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 List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }
    public void clearStore() {
        store.clear();
    }
}

답변 2

0

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

올리신 코드만 보았을 때 강의와의 차이점으로 findById가 아닌 findByID로 메서드 이름의 id에서 D가 대문자네요.

MemoryMemberRepository와 MemberRepository를 복사-붙여넣기하여 확인해보시고 그래도 오류가 발생한다면 발생한 오류 메시지를 남겨주세요.

MemberRepository

 import hello.hellospring.domain.Member;
 import java.util.List;
 import java.util.Optional;
 public interface MemberRepository {
     Member save(Member member);
     Optional<Member> findById(Long id);
     Optional<Member> findByName(String name);
     List<Member> findAll();
}

MemoryMemberRepository

 import hello.hellospring.domain.Member;
 import java.util.*;
 /*** 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려 */
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 List<Member> findAll() {
         return new ArrayList<>(store.values());
     }
     @Override
     public Optional<Member> findByName(String name) {
         return store.values().stream()
                 .filter(member -> member.getName().equals(name))
                 .findAny();
    }
     public void clearStore() {
         store.clear();
     }
}

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 장진웅님,

공유하신 코드와 관련하여 MemoryMemberRepository implements MemberRepository 부분에 빨간 줄이 생기는 문제는 일반적으로 몇 가지 원인으로 인해 발생할 수 있습니다. 주로 다음과 같은 이유입니다:
- MemberRepository 인터페이스가 해당 클래스 파일에 제대로 import되지 않았거나 해당 인터페이스 파일에 문제가 있는 경우.
- MemberRepository 인터페이스에서 정의한 메소드를 MemoryMemberRepository 클래스에서 모두 구현하지 않았을 경우
- Member 클래스 관련 문제로, Member 클래스가 올바르게 정의되어 있고 필요한 메서드(setId, getName 등)를 제공하는지 확인 필요.

질문하신 내용에 기반하여, 코드에서 MemberRepository 인터페이스의 모든 메소드(save, findById, findAll, findByName)를 구현하신 것으로 보이며, 이러한 경우 일반적인 원인은 첫 번째 또는 두 번째로 생각될 수 있습니다. MemberRepository 인터페이스의 정의 상태와 import 문이 올바른지, 그리고 인터페이스의 모든 메소드가 올바르게 구현되었는지 다시 한번 확인해보시기 바랍니다.

이 답변을 바탕으로 문제 해결에 필요한 구체적인 수정이나 보완을 진행해보시기 바랍니다.

제공된 정보에 기반하여 가장 관련이 있을 것으로 판단되는 조언과 링크를 제공드리었습니다. 추가적으로 이와 비슷한 문제 해결을 위해 참고할 수 있는 섹션3 - MemoryMemberRepository.java 링크도 유용할 수 있습니다. 해당 링크에서는 MemoryMemberRepository 클래스 구현 및 관련 오류 해결에 대한 설명이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.