자바 옵셔널 (Java Optional)

Optional이란?

Optional이 존재하지 않던 시절의 null 처리

if (data == null) { // 반환값 검사
	throw new Exception(e); // 예외처리
}

Optional이 생기게 된 이유

Optional 문법

반환하기

// Primitive Type
OptionalInt 메서드명() {
	return OptionalInt.of(반환변수);
}

// 제네릭
Optional<제네릭> 메서드명() {
	return Optional.ofNullable(반환변수); // null이 가능한 변수를 반환
}

Optional<제네릭> 메서드명() {
	return Optional.of(반환변수); // null이 불가능한 변수를 반환
}

반환받은값 사용하기

// 존재 확인
optionalObject.isPresent();
// 참일 경우 실행됨
optionalObject.isPresent(oc -> System.out.println(oc.getTitle()));

// 비어있는지 확인
optionalObject.isEmpty()

// 데이터 받아오기 : get
// 비어있는 Optional에서 get을 사용하면 Runtime Error 발생!
데이터타입 obj = optionalObject.get();

// 데이터 받아오기 :orElse
// orElse 내의 함수는 반드시 실행됨
데이터타입 obj = optionalObject.orElse(createNewClass());

private static 데이터타입() {
	return new 데이터타입();
}

// 데이터 받아오기  : orElseGet
// 괄호 안에 supplier 함수형 인터페이스가 들어가는데, 이는 Lazy Execution이므로 없을 때만 실행됨
데이터타입 obj = optionalObject.orElseGet(데이터타입::new);

// orElseThrow
// 
Toy myToy = max(toys).orElseThrow(TemperTeantrumException::new);

Optional을 반환하는 함수를 stream에 사용하기


Optional 사용시 주의사항