Programing/JAVA

Java Optional 알짜만 빼먹기 사용법/등장이유

리커니 2022. 10. 3. 22:22
반응형

Java Optional 알짜만 빼먹기 사용법/등장이유

이번 포스팅에서는 Java Optional에 대해서 알아보도록 하겠습니다.

 

언제? 왜?

Optional 은 Java 8에서 등장을 하게 됩니다. Java 8에서는 Optional 외에 default method, lambda, stream 등 다양한 신규 문법이 등장했습니다. 이는 개인적인 생각으로, 함수형 프로그래밍을 하기 위해 등장했다고 생각합니다.

 

Optional 은 Null Pointer Exception이 발생하지 않도록 하는 Wrapper class로 Null인 value에 접근하더라도 Null Pointer Exception이 발생하지 않습니다.

 

Optional 객체 생성

Optional은 empty(), ofNullable(), of() 3가지 메소드로 생성할 수 있습니다.

 

Optional<String> emptyString = Optional.empty();

 

empty()

empty() 메소드는 데이터가 빈 Optional 객체를 생성할 때 사용합니다.

 

String common = null;
Optional<String> nullableString = Optional.ofNullable(common);

 

ofNullable()

ofNullable() 은 null이 올 수 있는 Optional 객체를 생성할 때 사용합니다.

 

String common = "common";
Optional<String> commonString = Optional.of(common);

 

of()

of() 는 반드시 데이턱 있어야 되는 Optional 객체를 생성할 때 사용합니다.

만일 Null 인 객체로 생성 할 경우 NullPointerException 이 발생하게 됩니다.

 

Optional 객체 데이터 확인

Optional 데이터를 확인하기 위해선 isPresent() 메소드를 사용합니다.

 

isPresent()

Optional<String> oStr = Optional.of("present");
System.out.println(oStr.isPresent()); /** true */
Optional<String> oStr2 = Optional.ofNullable(null);
System.out.println(oStr2.isPresent()); /** false */

 

Optional 객체 데이터 접근

Optional 객체의 데이터 접근은 get() 메소드를 사용합니다.

 

get()

Optional<String> oStr = Optional.empty(); /** or Optional.ofNullable(null);
System.out.println(oStr.get()); /** NoSuchElementException */

oStr = Optional.of("default");
System.out.println(oStr.get()); /** default */

 

만일 위와 같이 empty() 나 ofNullable()로 생성한 객체에서 발생하는 NoSuchElementException 을 막기 위해서는

orElse() 메소드를 사용합니다.

 

orElse()

String defaultValue = "default";
Optional<String> oStr = Optional.empty();
System.out.println(oStr.orElse(defaultValue)); /** default */

oStr = Optional.ofNullable(null);
System.out.println(oStr.orElse(defaultValue)); /** default */

 

orElseGet() 메소드를 사용하면 Function Interface인 Supplier<T> 를 활용할 수 있습니다.

 

orElseGet()

Supplier<String> stringSupplier = new Supplier<String>() {
    @Override
    public String get() {
        return "aljjabaegi.tistory.com";
    }
};

Optional<String> oStr = Optional.empty();
oStr.orElseGet(stringSupplier);

 

Exception을 발생 시키고 싶다면 orElseThrow() 메소드를 사용합니다.

 

Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
    @Override
    public Exception get() {
        return new Exception();
    }
};
try{
    Optional<String> oStr = Optional.empty();
    oStr.orElseThrow(exceptionSupplier);
}catch(Exception e){
    System.out.println(e);
}

 

 

 

반응형