[Java] Optional

Junseo Kim·2021년 2월 10일
0

[Java]자바 기초

목록 보기
27/35

자바8에 추가된 새로운 인터페이스이다.
값이 없을수도 있고, 하나의 값을 담고 있을 수도 있는 인스턴스 타입이다.

Optional이 나오기 전까지는 하나하나 null 체크를 해주어야했다.
하지만 null체크를 까먹을수도 있고, null을 리턴하는 것도 문제다.

null을 리턴하는 것이 문제인 이유는
1) null인 경우 에러를 던지거나 하는 식으로 처리하는 데, 만약 CheckedException을 던지기 시작하면 에러 처리를 강제한다는 문제점이 생김
2) 에러가 발생하면 에러 발생 전까지의 call stack을 담게되는데 이 자체가 리소스를 사용하게 된다.

-> 꼭 필요한 경우만 예외를 써야하며 로직을 처리할 때 에러를 쓰는 것은 좋지 않다.

Optional을 사용하면 비어있는 값이 전달될 수 있다면 Optional로 감싸서 리턴할 수 있다.

public Optional<Progress> getProgress() {
    return Optional.ofNullable(progress);
}

Optional은 제한은 없지만 리턴타입에만 쓰는 것이 권장사항이다. 매개변수에 쓰거나 해도 문제는 없지만, 이런경우 또 null체크를 해줘야하는 번거로움이 생긴다.

리턴할게 없다면 null이 아닌 Optional.empty()를 리턴하도록 한다.

Optional 기능

isPresent(): Optional이 값을 포함하면 true, 값을 포함하지 않으면 false 반환.

ifPresent(Consumer< T > block): 값이 있으면 주어진 block 실행.

T get(): 값이 존재하면 값을 반환. 값이 없으면 NoSuchElementException.

T orElse(T other): 값이 있으면 값을 반환. 값이 없으면 Other 값 반환.

Reference: 백기선님 더 자바, Java 8
Java Optional 바르게 쓰기

0개의 댓글