본문 바로가기

Java

Optional 클래스

Optional 객체 생성법

 

private void createOptionalObjects() {
        Optional<String> emptyString = Optional.empty();
        String common = null;
        Optional<String> nullableString = Optional.ofNullable(common);
        common = "common";
        Optional<String> commonString = Optional.of(common);
    }
 
cs

 

1. 데이터가 없는 객체를 생성하려면 empty() 사용

2. null이 추가될 수도 있는 상황이라면 ofNullable() 사용

3. 반드시 데이터가 들어가야하는 상황에서는 of() 사용

 

 

객체에서 값을 꺼낼 때

 

private void getOptionalData(Optional<String> data) throws Exception {
        String defaultValue = "default";
        String result1 = data.get();
        String result2 = data.orElse(defaultValue);
        Supplier<String> stringSupplier = new Supplier<String>() {
            @Override
            public String get() {
                return "OptionalTest";
            }
        };
 
        String result3 = data.orElseGet(stringSupplier);
        Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
            @Override
            public Exception get() {
                return new Exception();
            }
        };
 
        String result4 = data.orElseThrow(exceptionSupplier);
    }
 
cs

 

String result1 = data.get();

1. 일반적으로는 get()을 사용한다. 비어있을경우 null값을 반환함.

 

String result2 = data.orElse(defaultValue);

2.  orElse() 사용시 null값일때 기본값을 지정해서 사용가능함.

String result3 = data.orElseGet(stringSupplier);

3. orElseGet()은 파라미터로 단순한 값이 아닌 객체를 받아 사용할 수 있다.

orElse()는 값이 미리 존재할때 사용가능하지만 orElseGet은 값이 준비되어 있지 않을때에도 사용가능하다.

 

String result4 = data.orElseThrow(exceptionSupplier);

4. 데이터가 없을 경우 예외를 발생시키고 깊다면 orElseThrow()를 사용한다.

 

 

 

Optional 클래스를 사용하는 이유

 

 

가장 큰 목적은 NPE(NullPointerException)을 피하기 위해서이다.

DB와 연동하는 프로그램의 경우 DB의 값이 null일 경우가 있을수도 있는데 

NPE를 피하고자 고전적인 방식으로는 null check 로직을 따로 준비해야 했다.

Optional을 사용하면 번거로운 과정을 줄일 수 있다.

 

 

 

'Java' 카테고리의 다른 글

Stream API  (0) 2022.03.02
익명클래스와 람다식  (0) 2022.03.01
테스트 범위와 종류  (0) 2022.02.22
테스트케이스의 대역  (0) 2022.02.21
TDD방법론 - 암호검사기4(WEAK CASE)  (0) 2022.02.13