작성
·
524
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
예
[질문 내용]
안녕하세요 강의 잘 보고 있습니다 ㅎㅎ
다름이 아니라 저는 getter와 setter를 따로 작성하지 않고 Lombok을 이용해서 getter, builder 어노테이션으로 getter와 setter를 생성했는데요
save() 테스트는 정상적으로 통과하지만
findByNmae() 테스트 시에는 아래와 같은 오류가 발생합니다.
그리고 아래 처럼 get() 메서드에 노란 점선이 표시되며
옆에 이상한 문구가 뜨는데 lombok을 사용해서 발생한 오류일까요 ??
스프링 부트 버전은 강의와 똑같이 2.3.1 버전을 사용중이며
각 클래스별 코드는 아래와 같습니다.
Member
package com.example.hellospring.domain;
import lombok.Builder;
import lombok.Getter;
@Getter
public class Member {
private Long id;
private String name;
@Builder
public Member(Long id, String name) {
this.id = id;
this.name = name;
}
}
MemberRespository
package com.example.hellospring.repository;
import com.example.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
// 회원 저장
Member save(Member member);
// id로 회원 찾기
Optional<Member> findById(Long id); // Optional 타입은 값이 Null일 때 null 반환
// name으로 이름 찾기
Optional<Member> findByName(String name);
// 전체 찾기
List<Member> findAll();
}
MemoryMemberRepository
package com.example.hellospring.repository;
import com.example.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.builder()
.id(++sequence)
.build();
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());
}
}
답변 1
0
안녕하세요, HH 님. 공식 서포터즈 y2gcoder 입니다.
public class MemoryMemberRepository implements MemberRepository {
//...
@Override
public Member save(Member member) {
Member.builder()
.id(++sequence)
.build();
store.put(member.getId(), member);
return member;
}
//...
}
해당 부분에서 문제가 2개 존재합니다.
1) sequence가 저장되지 않습니다. 왜냐하면 Member.builder().build()를 통해 다른 member 인스턴스를 생성해주시기 때문입니다.
2) 1)의 결과로 id가 null인 member 객체를 저장하고 있습니다.
기존 코드로 save()쪽을 디버깅해서 member가 정상적으로 저장되는 지 보시고 위의 save() 코드를 적절하게 바꿔주시기 바랍니다.
감사합니다.