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

오상수님의 프로필 이미지
오상수

작성한 질문수

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

순수 JDBC

Jdbc 순수 강의 코드 복붙 하다가 오류나요

작성

·

1.5K

0

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

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

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

[질문 내용]
1. 첫번째오류

error: JdbcMemberRepository is not abstract and does not override abstract method clearStore() in MemberRepository

public class JdbcMemberRepository implements MemberRepository{

스크린샷 2023-03-09 오후 5.28.01.png두번째오류

error: method does not override or implement a method from a supertype

@Override

^스크린샷 2023-03-09 오후 5.29.01.png두시간째 헤매이고있어요

답변 1

0

안녕하세요, 오상수 님. 공식 서포터즈 y2gcoder 입니다.

error: JdbcMemberRepository is not abstract and does not override abstract method clearStore() in MemberRepository

 

첫번째 예외는 MemberRepository에 clearStore() 메서드가 추상 메서드인데 JdbcMemberRepository가 이를 구현해주지 않아서 생기는 예외입니다. 추상 메서드를 상속하는 클래스가 추상 클래스가 아니면 해당 메서드를 반드시 구현해주어야 합니다. 그런데 제가 알기로

public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();
}

위와 같이 MemberRepository 인터페이스에는 clearStore() 추상 메서드가 존재하지 않습니다.

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

}

이렇게 clearStore()는 MemoryMemberRepository 에만 존재해야 합니다. 한 번 살펴봐주시길 바랍니다 :)

 

error: method does not override or implement a method from a supertype

@Override

두 번째 예외는 @Override를 붙일 자리가 아닌데 @Override를 붙여서 생기는 예외입니다. 즉, 구현하거나 상속할 메서드가 아닌데 위에 @Override가 붙은 경우입니다.

이 부분은 70번째 라인이 보이지 않아서 정확하게 말씀드리기 어렵습니다. 직접 확인해보시고 강의 자료에 있는 코드와 비교해보시길 바랍니다!

 

혹시 해결되지 않으신다면 JdbcMemberRepository, MemberRepository, MemoryMemberRepository의 전체 코드를 보여주시면 좀 더 자세 도움이 될 것 같습니다.

감사합니다.

오상수님의 프로필 이미지
오상수

작성한 질문수

질문하기