Optional

HEUKWU·2023년 2월 6일
0

Optional<T>

Optinal<t>는 Integer, Long 클래스처럼 T타입의 객체를 감싸는 래퍼클래스이다. 따라서 모든 타입의 참조변수를 담을 수 있다.

Optional 클래스를 사용한는 이유는 null을 간접적으로 다루기 위함이다. null을 직접다루게 되면 NullPointerException을 만나게 될 수도 있다. 따라서 if문을 따로 생성해 null체크를 해줘야 하는데 코드가 지저분해지는 것을 피할 수 없을 것이다.

Object result = getResult();
//result의 반환값이 null이라고 가정
result.toString(); // NullPointerException 발생!!

// if문을 통해 null체크
if (result != null) {
	result.toString();
}

따라서 최종 연산의 결과를 그냥 반환하지 않고 Optional객체에 담아서 반환하는 것이다. 그렇다면 결과값이 null이라도 Optional객체에 담겨서 반환되기 때문에 예외가 발생하지 않는다.

Optional 객체 생성

Optionala객체를 생성할 때는 Optional 클래스의 of()ofNullable()메서드를 사용한다.

변수의 값이 null일때는 NullPointerException이 발생하기 때문에 Nullable()메서드를 사용해야 한다.

String s = "abc";
Optional<String> o = Optional.of(s);
Optional<String> o = Optional.ofNullable(s);

Optional 타입의 참조변수를 기본값으로 초기화 할때는 empty()메서드를 사용한다.

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

Optional 객체 값 가져오기

Optional 객체의 값을 가져올 때는 get()메서드를 사용한다. 값이 null이라면 NoSuchElementException이 발생하고 이때는 orElse()메서드를 사용해 대체한다.

Optional<String> o = Optional.of("abc");
String s1 = o.get();
String s2 = 0.orElse();

값이 null일때 대신할 값을 반환해주고 싶다면 그 값을 반환하는 람다식을 지정할 수 있는 orElseGet()메서드를 사용할 수 있다.

T orElseGet (Supplier<? extends T? other)

또 지정된 예외를 발생시킬 수 있는 orElseThrow()메서드가 있다.

T orElseThrow (Supplier<? extends T? exceptionSupplier)

사용법을 간단하게 살펴보면,

String s1 = o.orElseGet(String::new);
String s2 = o.orElseThrow(NullPointerException::new);

이런식으로 사용할 수 있다.

0개의 댓글

관련 채용 정보