해결된 질문
작성
·
104
0
공부하던 중에 이 부분은 이렇게 수정해야 되는 것 아닌가..? 싶어서 글 남겨봅니다.
[수정 제안 정보]
대상 강의록: 10. Optional.pdf
대상 위치: 강의록 p.24의 최상단 부분
, 영상의 10분 50초~
수정 제안
수정 전:
사용 용도
orElse(T other)
- 값이 이미 존재할
가능성이 높거나, ...
수정 후:
사용 용도
orElse(T other)
- 값이 존재하지 않을
가능성이 높거나, ...
수정 제안에 대한 근거
orElse(T other)
는 other의 생성 비용이 높은 경우에 "값이 이미 존재함에도 불구하고 생성 연산을 수행해야됨"으로 인해서 비효율이 발생합니다.
이는 바꿔 말하면 "값이 존재하지 않는 경우에는 생성 연산이 필수적임"이기 때문에 "값이 존재하지 않는 경우에는 비효율이 발생하지 않음"이라고 해석할 수 있을 것 같습니다.
이때 강의에서 말하고자 하는 바는 "orElse()는 비효율이 발생할 수도 있다. 하지만 발생하지 않는 경우에는 사용해도 좋다." 라고 이해했는데, 이때 "비효율이 발생하지 않는 경우"를 "값이 존재하지 않는 경우(생성 연산이 꼭 필요한 경우)"라는 표현으로 대체할 수 있기 때문에
"값이 존재하지 않을 가능성이 높은 경우(= 비효율이 발생하지 않는 경우)에는 orElse()를 사용해도 괜찮다."라고 수정해야 하는 것이 아닌가 싶어서 제안합니다.
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다. dev.rudevico님.
Optional의 orElse()
메서드 사용에 대한 제안해주신 부분에 대해 설명드리겠습니다. orElse(T other)
메서드는 Optional 객체가 비어 있을 때 제공된 기본값 other
를 반환하도록 설계되어 있습니다. 이 메서드는 값이 없을 경우에 대비해 대체값이 필요할 때 유용하게 사용됩니다. 당신의 제안대로 “값이 존재하지 않을 가능성이 높은 경우(= 비효율이 발생하지 않는 경우)“에 orElse()
를 사용해도 괜찮다는 것은 올바른 방향이라고 볼 수 있습니다.
여기서 주의해야 할 점은, orElse(T other)
는 other
를 항상 평가(evaluate)한다는 것입니다. 즉, 값이 존재하지 않아서 other
의 생성이 필요한 상황이 아니라도, 항상 생성하게 됩니다. 따라서 other
의 생성 비용이 높은 경우에는 orElseGet(Supplier<? extends T> supplier)
를 사용하는 것이 더 효율적입니다. 이는 값이 없을 때만 람다를 수행하기 때문입니다.
관련된 내용을 더 이해하시려면 아래의 답변들을 참고하시면 좋습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.