티스토리 뷰

IT/JAVA 및 Spring

[Java] Java8에서 적용된 Optional 사용 방법

주인장 진빼이

Optional

Optional<T> 클래스는 Java 8 에서 추가되었으며 자바의 고질적인 문제인 NullpointerException 문제를 유연하게 처리할 수 있도록 도움을 주는 클래스이다.

 

객체를 wrapping하는 객체로서 null 또는 자바 객체를 보유할 수 있다.
wrapping 클래스를 Optional 클래스라고 표현하고 보유하고 있는 객체를 내부 객체라고 표현한다.

Optinal 사용 이유

Optinal이 도입되기 전에 Java8에서는 if를 이용하여 null값을 체크했다.
하지만 if를 통한 null 체크는 다음과 같은 단점들이 존재했다.

  1. 코드가 길어짐에 따라 코드의 가독성이 점점 떨어지게 된다
  2. 각 변수마다 null값을 체크해야 되기 때문에 하나라도 누락하면 프로그램 오류가 발생하여 정상작동이 어려울 수 있다.

이러한 이유들로 Java8에서 부터 추가된 Optional 객체에 담아 데이터를 관리하게 된다.

Optional.empty()

null을 허용할 수 있는 객체를 생성한다. 만약 내부객체가 null인 경우 get()으로 접근 시 No value present 오류가 발생할 수 있다.

Optional.of(value)

of는 NULL을 허용하지 않는 것을 의미하며, value에 대입된 값을 기반으로 Optinal 객체가 생성된다.
만약 null 값을 입력하여 객체를 생성할 시, NPE가 발생한다.

Optional<String> obj = Optional.of(null); // 객체 생성 불가

Optinal.ofNullable(value)

ofNullable은 NULL을 허용한다는 것을 의미하며, null 또는 value에 대입된 값을 기반으로 Optinal 객체가 생성된다.

Optional<String> obj = Optional.ofNullable(null); // 객체 생성 가능

Optinal.isPresent()

내부객체가 null인지 아닌지를 확인할 수 있으며, true 반환값은 객체가 보유한 값이 not null을 의미하며, false 반환값은 null을 의미한다. isNull() 과 유사한 느낌의 함수이다.

boolean 타입을 반환하기에 조건문에 사용될 수 있다.

Optional.ifPresent()

Optional 객체가 가지고 있는 보유한 값이 not null인 경우(present 리턴이 true) 등록한 action method를 호출한다.

if문으로 null을 검사하여 not null일 때 코드를 실행하는 부분을 이 함수로 대체하여 자주 사용한다.

람다식을 이용하여 action method에서 내부 객체를 접근하여 사용할 수도 있다.

Optional<String> name = Optional.Nullable("메시지 텍스트");
name.ifPresent(name -> <action method>);

Optional.get()

Optional 내부 객체에를 반환 및 접근합니다.

Optional<String> opName = Optional.Nullable("메시지 텍스트");
String name = opName.get();

 

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함