TIL/TIS 211108

gyeon·2021년 11월 7일
0

TIL/TIS

목록 보기
2/14

Optional

API Note:
Optional is primarily intended for use as a method return type where there is a clear need to represent "no result," and where using null is likely to cause errors. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.
Optional은 주로 "결과가 없음"을 분명히 표현해야 하거나, null을 반환시 오류가 발생 가능한 경우 메서드의 반환타입으로 의도되었다. Optional 타입의 변수의 값은 절대 null이 아니어야 합니다. 항상 Optional 인스턴스를 가리켜야 합니다.
oracle docs

저장소에서 특정 데이터를 검색했는데 없는 경우 그 값을 감싸서 안전하게 사용하기 위해.
또한 반환된것이 null이 아니라 optional에 포한된 null이기 때문에 NullPointerException를 피할수 있고, null이 의도되었다는 것을 알 수 있으며, optional로 감싼 null을 활용할수도 있다.
그러나 Optional은 비싸다. -> 안쓸수 있으면 안쓰는게 좋다.
homoefficio블로그_optional 바르게 쓰기

Optional인스턴스 생성 방식

코드를 입력하세요
Optional<반환형> optional = method();	// Optional에 맞춰서 반환하는 메소드사용
Optional<반환형> optional = Optional.empty();	// 빈 Optional 생성
Optional<반환형> optional = Optional.of(null아닌객체);
Optional<반환형> optional = Optional.ofNullable(null포함한객체);

Optional 사용법
isPresent() -> value(래핑된 값)가 null이 아니면(존재하면) true
isEnpty() -> value가 null이면 true
ifPresent(람다식) -> value가 null이 아니면 람다식수행. 반환없음
orElse(람다식) -> value가 존재하면 value반환, 없으면 람다식결과값 반환
orElseGet(람다식) -> value가 존재하면 value반환, 없으면 람다식수행 후 결과값 반환
orElse의 람다식은 value유무 상관 없이 무조건 실행,
orElseGet의 람다식은 value가 있어야 실행,
orElseThrow(Exception::new) -> value가 없으면 Exception을 던진다(반환값도 예외인듯).
get() -> Optional의 의도와 다른 메소드 이므로 사용 지양. value를 받아오는데 null이면 NoSuchElementException발생.
filter(조건람다식) -> value가 있고, 조건람다식이 true이면 Optinal을 그대로 반환하고, flase인 경우 빈 Optional을 반환한다.
조건람다식은 boolean이 반환되게 작성.
map(람다식) -> value값을 가져와서 람다식에 넣어 계산하고, 그 결과를 Optional로 감싸서 반환.
flatMap() -> 이미 래핑된 값을 가져와 래핑을 해제하고 변환한다.
map은 래핑을 수동으로 풀어줘야하는데 flatmap은 알아서 래핑을 풀어주는듯?
참고한 곳 : daddyprogrammer_java optional 사용법

profile
백엔드와 서버 in 42Seoul

0개의 댓글