해결된 질문
작성
·
572
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요! 수업 도중 궁금한 점이 생겨 질문드립니다.
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
// System.out.println("result = " + (result==member));
Assertions.assertEquals(member, result);
}
이 부분에서 Member result를 할 때 get()을 해주는 이유는 findById의 반환값이 optional이기 때문인건가요...? 그렇다면 optional은 get을 왜 해줘야하는지도 궁금합니다.
감사합니다
답변 2
2
findById의 반환값이 optional이기 때문인건가요...?
-> 네 맞아요. 영한님이 강의에서도 설명해주지만, 강의 내용자체가 optional을 다루는 수업은 아니라서
Optional.get()으로 바로 member 객체를 가져오죠
optional은 get을 왜 해줘야하는지
-> Optional 은 null일 수 있는 객체를 감싸는 wrapper 객체이구요.
wrapper라는건 무언가를 감싸고있는 객체란 의미고, 이 경우에는 Member를 감싸고 있겠죠
그래서 .get() 메서드를 통해 감싸진 Member를 가져오는 겁니다.
지금 우리에게 필요한건 햄버거인데, 배달시켜서 온 배달 봉투를 받게 되었고,
봉지 속에서 햄버거를 꺼내는 과정이라고 비유할 수 있겠네요!
java 8 optional 이란 키워드로 검색해보세용
1
안녕하세요. s_971001님, 공식 서포터즈 OMG입니다.
Optional이기 때문에 .get()을 사용한게 맞습니다 :)
Optional<Member>
result = repository.findById(member.getId());
Member result = repository.findById(member.getId()).get();
두 코드를 비교해보시면 확인 가능한데요, findById()의 반환 타입은 Optional<Member>이므로
첫번째와 같이 result 변수의 타입이 Optional<Member>인 반면,
.get()
을 호출함으로써 Member타입의 반환 타입을 사용할 수 있게 됩니다.
강의에서 검증하려는 단언문은 다음과 같이
Assertions.assertEquals(member, result);
Member타입의 member 인스턴스와 findById()의 반환 타입을 맞춰주기 위해 .get()
을 사용하였습니다.
감사합니다.
2023. 11. 28. 14:50
감사합니다!