Optional

kmb·2022년 7월 5일
0

자바

목록 보기
23/31
post-thumbnail

Optional은 null 처리를 편리하게 처리하기 위해서 만든 클래스이다.
NPE(Null Pointer Exception) 방지를 위해 자주 쓰인다.
java.util 패키지에 속해있으며 다음과 같이 선언되어있다.

public final class Optional<T>
	extends Object

Object 클래스를 확장했고 Generic한 클래스이다.
final 클래스로 선언되어서 확장이 불가능하다 (즉 자식 클래스를 만들수 없다.)


  • Optional 클래스를 반환하는 메서드들

.empty( ) : 데이터가 없는 Optional 객체를 생성할때 사용

Optional<String> optinalEmpty = Optional.empty();
System.out.println("optinalEmpty : " + optinalEmpty);
    
// optinalEmpty : Optional.empty

 
.of( ) : 반드시 데이터가 들어갈 수 있는 상황일때 사용

String word = "test";
    
Optional<String> optionalOf = Optional.of(word);
System.out.println("optionalOf : " + optionalOf);
    
// optionalOf : Optional[test]
    
word = null;
Optional<String> optionalOf_2 = Optional.of(word);
System.out.println("optionalOf_2 : " + optionalOf_2);
    
// NPE(Null Pointer Exception) 발생

 
.ofNullable( ) : null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성

String word = "test";

Optional<String> optionalOfNullable = Optional.ofNullable(word);
System.out.println("optionalOfNullable : " + optionalOfNullable);

// optionalOfNullable : Optional[test]

word = null;
Optional<String> optionalOfNullable_2 = Optional.ofNullable(word);
System.out.println("optionalOfNullable_2 : " + optionalOfNullable_2);
    
// optionalOfNullable_2 : Optional.empty

.ofNullable( ) 메서드 내부에 null 값이 들어올경우 .of( ) 메서드와 달리 NPE를 발생시키지않고 Optional.empty( )와 동일하게 비어 있는 Optional 객체를 가져온다.

 
.isPresent( ) : Optional 클래스가 비어있는지 확인할때 사용

String word = "test";
System.out.println(Optional.of(word).isPresent());
    
// true
    
word = null;
System.out.println(Optional.ofNullable(word).isPresent());
    
// false

  • Optional 객체에 담긴 데이터를 리턴하는 메서드들

 
.get( ) : 데이터가 없을경우 null 리턴

Optional<String> optionalGet = Arrays.asList("test1", "test2").stream().findFirst();
System.out.println("optionalGet : " + optionalGet.get());

// optionalGet : test1

Optional<String> optionalGet = Arrays.asList(null, "test2").stream().findFirst();
System.out.println("optionalGet : " + optionalGet.get());

// NPE(Null Pointer Exception) 발생

 
.orElse( ) : 데이터가 없을경우 기본값을 지정해준다. (데이터가 있든 없든 무조건 실행된다)

String username = "이름";
String result = Optional.ofNullable(username).orElse("no name");
System.out.println("result : " + result);

// result : 이름

String username = null;
String result = Optional.ofNullable(username).orElse("no name");
System.out.println("result : " + result);

// result : no name

 
.orElseGet( ) : orElse( )는 null이든 아니든 무조건 실행되지만, orElseGet( )은 null일때만 실행이된다.

 
.orElseThrow( ) :데이터가 없을경우에 예외를 발생시키기 위해 사용한다.

출처

  • 자바의 신 (책)
profile
꾸준하게

0개의 댓글