7. Java - Optional

JJo·2021년 6월 5일
0

React + SpringBoot

목록 보기
8/12

시작

안녕하세요 !
오늘은 Java 8 부터 등장한 Optional 객체에 대해서 알아보겠습니다.

1. Optional ?

Optional 객채는 자바에서 Null 을 처리하기 위해 새롭게 등장한 방식인데요 !
Optional 를 이용하면 NPE (NullPointerException) 회피하고 null 처리를 쉽게 할 수 있습니다.

2. Optional 객채 생성

Optional 객채를 사용하기 위해서 사용하는 메소드를 알아 보겠습니다.

of()

public static <T> Optional<T> of(T value);
of() 메소드를 사용해서 생성 할 수 있습니다.
of() 를 사용하면 value 값은 null 아닌 명시된 값을 가진 Optional 객채를 반환합니다. value 값으로 null 이 들어가게 되면 NPE 를 발생합니다.

    String name = null;
    String name_2 = "hello";

    Optional<String> optionalString = Optional.of(name); // NPE 발생
    Optional<String> optionalString_2 = Optional.of(name_2);

ofNullable()

public static <T> Optional<T> ofNullable(T value);

ofNullable() 메소드를 사용하면 of() 메소드와 다르게 value 의 값이 null 값이 들어와도 NPE 를 발생시키지 않고 비어있는 Optional 객채를 반환합니다.

String name = null;

Optional<String> stringOptional = Optional.ofNullable(name);
System.out.println(stringOptional);

Optional.empty 가 System Log에 출력됩니다.

empty()

public static<T> Optional<T> empty();

empty() 메소드를 사용하면 비어있는 객채를 생성할수 있습니다.

Optional<String> stringOptional = Optional.empty();
System.out.println(stringOptional);

Optional.empty 가 System Log에 출력됩니다.

3. Optional 종단

isPresent()

Optional 객채가 존재하는지(비어있는지) 여부를 판단하는 메소드 입니다.
존재하면 True, 비어있으면 false 를 반환합니다.

Optional.of("optional").isPresent(); // true
Optional.empty().isPresent(); // false

ifPresent()

Optional 객채가 존재하면 작업을 실행하고 객채가 비어있으면 작업을 실행하지 않습니다.

Optional.of("Optional").ifPresent((value)-> {
		System.out.println(value); // "Optional"
	});

Optional.empty().ifPresent((value)-> {
		System.out.println("test");
		// 작업이 실행되지 않음
	});

get()

Optional 객채를 꺼내서 가져옵니다. Optional 객채가 비어있으면 NPE 를 발생시킵니다,

Optional.of("Optional").get(); // "Optional" 이 반환됨
Optional.empty().get(); // NPE 발생

orElse()

Optional 객채가 비어있으면 default value(기본값)을 반환하고, 비어있지 않으면 객채를 꺼내서 가져옵니다.

Optional.of("Optional").orElse("default"); // "Optional"
Optional.empty().orElse("default"); // "default"

orElseGet()

orElse() 메소드와 동일하게 동작합니다. Optional 객채가 비어있다면 공급자 함수(supplier) 를 통해서 기본값이 지정됩니다.

Optional.of("Optional").orElseGet( ()-> "default"); // "Optional"
Optional.empty().orElseGet( ()-> "default"); // "default"

orElseThrow()

Optional 객채가 비어있다면 공급자 함수(supplier)를 통해서 예외를 발생시킵니다.

Optional.of("Optional").orElseThrow(()-> new NoSuchElementException());
Optional.empty().orElseThrow(()-> new NoSuchElementException()); // 예외가 발생됩니다.

Optional Method 습관
Optional.isPresent().get() 보다는 orElse(),orElseGet(),orElseThrow() 를 사용하는 것이 좋습니다.

orElse()orElseGet()
orElse() 메소드는 객채가 비어있든 비어있지 않든 반드시 실행됩니다.
orElseGet() 메소드는 객채가 비어있을때만 공급자 함수가 실행됩니다.
기본값을 처리하는 과정이 오래걸리는 과정이라면 orElseGet()를 사용하면 더 빠르게 처리 할 수 있습니다.

마침

자바에서의 null를 처리하는 방법인 Optional 객채에 대해 알아 보았는데요.
앞으로 Optional 객채를 적절하게 사용해서 null 처리를 해봅시다~

profile
안녕하세용!!!

0개의 댓글