작성
·
125
·
수정됨
0
public List<Member> findAll(){에서 new가 나오는 이유가 ArrayList<>의 값을 초기화 해주고 ArrayList배열에 값을 저장해주기 위함인가요?
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.*;
@Slf4j
@Repository
public class MemberRepository {
private static Map<Long,Member> store=new HashMap<>();
private static long sequence=0L;
public Member save(Member member){
member.setId(++sequence);
log.info("save:member={}",member);
store.put(member.getId(),member);
return member;
}
public Member findById(Long id){
return store.get(id);
}
public Optional<Member> findByLoginId(String loginId){
return findAll().stream()
.filter(m->m.getLoginId().equals(loginId))
.findFirst();
}
public List<Member> findAll(){
return new ArrayList<>(store.values());
}
}
멤버에 setLoginId 부분에서 에러가 납니다. 테스트 데이터를 보와도 틀린 부분을 못찼겠습니다.
전체코드 첩부합니다. https://drive.google.com/file/d/1uzae3ASJmi4P9EiB-wPMaEnRfgEX_drj/view?usp=drive_link
Member member = new Member();
member.setLoginId("test");
member.setPassword("test!");
member.setName("테스터");
memberRepository.save(member);
답변 1
0
안녕하세요. zzzzz님, 공식 서포터즈 OMG입니다.
(1)
store에 저장된 값만 추출하여 새로운 ArrayList 인스턴스를 반환하기 위함입니다 ^^
다음 링크를 참고해주세요 😀
참고)
https://www.inflearn.com/questions/572022
(2)
아래가 강의에서 제공해드리는 코드인데요,
컴파일 오류가 발생하는 코드가 init()메서드 바깥에 있네요 😀
감사합니다.
작성하신 코드는 아래와 같이
클래스의 멤버변수를 선언하는 헤더 영역에서 변수를 초기화는 것과 차이가 없습니다.
.
자바에서는 인스턴스 변수를 선언하고 초기화할 때, 이를 메서드나 생성자 내부에서 수행해야 합니다
갈호바깥:init메소드() 밖 으로 지칭
init메소드() 괄호 바깥에 있어도 애초에 바깥에서 객체 생성해줬고 private final memberRepository도 init메소드() 괄호 바깥부분에서 생성했는데 컴파일 에러는 안나야 하는거 아닌가요?