본문으로 바로가기

Java8 Optional이란?

category Language/JAVA 2018.01.12 15:33

Java8 Optional이란?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class OptionalTest {
    @Test
    public void optionalEmpty() throws Exception {
        Optional<Integer> hello = Optional.empty();
 
        System.out.println(hello.get());
        System.out.println(hello.isPresent());
        hello.ifPresent(item -> System.out.println(item));
    }
 
    @Test
    public void hello() throws Exception {
        Optional<Integer> hello = Optional.empty();
        hello.ofNullable(null);
 
        System.out.println(hello);
    }
}
cs

코드1


Optional은 Java8에서 Java의 Null Pointer Exception을 피하기 위해 만든 클래스이다.


직접 쓰기 보다는 method를 만들 때 Optional로 감싸주면 Null Pointer Exception을 예방 할 수 있다.


1
2
3
4
5
private Optional<Thread> findThreadByName(long gameId){
        return Thread.getAllStackTraces().keySet().stream()
                .filter(thread -> String.valueOf(gameId).equals(thread.getName()))
                .findAny();
}
cs


위와 같이 Thread를 Return하는 예제인데 찾은 Thread가 없을 경우 Optional로 감싸주면 뒤에서 처리하기가 좋다.


코드1의 optionalEmpty()는 실행하면 java.util.NoSuchElementException: No value present 에러가 난다.


Optional이 Empty인 상태에서 .get()을 쓰면 에러가 나기 때문에 .isPresent()로 체크를 한 뒤에 쓰거나


[코드1]의 8번줄 처럼 .ifPresent(Consumer) 를 써준다.


동작은 if(Optional == null){}과 유사하게 작동 하지만 Optional을 써주면 좀 더 깔끔하게 처리 된다.


end.










댓글을 달아 주세요