반응형
Optional 클래스란?
▶ NullPointerException 예외를 회피하기 위한 다양한 메소드를 제공하는 클래스
public final class Optional<T> extends Object
▶ 저장하는 값의 타입만 다르고 제공하는 기능은 동일한 Optional, OptionalDouble, OptionalInt, OptionalLong 클래스가 존재
▶ Funtional 언어인 Haskell과 Scala에서 제공하는 기능을 따 온 것
▶ java.util 패키지 소속
제공 메서드
리턴타입 | 메서드 | 설명 |
boolean | isPresent() | · Optional 클래스가 비어 있는지 확인 |
Optional<T> | empty() | · 데이터가 없는 Optional 객체 생성 |
Optional<T> | of() | · 반드시 데이터가 들어있는 Optional 객체 생성 |
Optional<T> | ofNullable() | · null일 수 있는 ptional 객체 생성 |
T | get() | · 값이 저장되어 있지 않은 경우 null 리턴 |
T | orElseGet() | · 값이 저장되어 있지 않은 경우 매개변수로 입력된 Supplier가 실행되어 값을 리턴 |
T | orElse(T) | · 값이 저장되어 있지 않은 경우 디폴트 값 지정 |
double | orElse(double) | |
int | orElse(int) | |
long | orElse(long) | |
void |
ifPresent(Consumer) | · 값이 저장되어 있는 경우 Consumer에서 처리 |
ifPresent(DoubleConsumer) | ||
ifPresent(IntConsumer) | ||
ifPresent(LongCunsumer) |
사용예시
▶ empty, of, ofNullable 메서드로 Optional 객체 생성
import java.util.Optional;
public class createOptionalObj {
public static void main(String[] args){
Optional<String> emptyString = Optional.empty();
String common = null;
Optional<String> nullableString = Optional.ofNullable(common);
common="common";
Optional<String> commonString = Optional.of(common);
}
}
▶ get(), orElse(), orElseGet(), orElseThrow() 메서드로 Optional 데이터 꺼내기
private void getOptionalData(Optional<String> data) throws Exception {
String defaultValue = "default";
String result = data.get(); //1.
String result2 = data.orElse(defaultValue); //2.
Supplier<String> stringSupplier = new Supplier<String>() {
@Override
public String get(){
return "GodOfJava";
}
}
String result3 = data.orElseGet(stringSupplier); //3.
Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
@Override
public Exception get() {
return new Exception();
}
};
String result4 = data.orElseThrow(exceptionSupplier); //4.
}
▶ isPresent 메소드로 평균값 여부 확인 - 컬렉션 요소의 평균 구하기
List<Integer> list = Arrays.asList(1,2,3,7);
OptionalDouble optionalDouble = list.stream()
.mapToInt(Integer :: intValue)
.average();
if (optionalDouble.isPresent()){
System.out.println("평균: " + optionalDouble.getAsDouble());
}else{
System.out.println("값이 존재하지 않아요.");
}
▶ orElse 메소드로 디폴트 값 정하기 - 컬렉션 요소의 평균 구하기
List<Integer> list = Arrays.asList(1,2,3,7);
double avg = list.stream()
.mapToInt(Integer :: intValue)
.average()
.orElse(0.0);
System.out.println("평균: " + avg);
▶ ifPresent 메소드로 평균값이 있을 때만 값을 이용하기 - 컬렉션 요소의 평균 구하기
List<Integer> list = Arrays.asList(1,2,3,7);
list.stream()
.mapToInt(Integer::intValue)
.average()
.ifPresent(a -> System.out.println("평균: " + a));
Optional 바르게 사용하기
출처
이것이 자바다
자바의신
반응형
'자바' 카테고리의 다른 글
[Java] 접근 제한자(제어자) - public, protected, default, private (0) | 2021.08.12 |
---|---|
[Java] 자바의 패키지란? - package, import, 클래스패스, -classpath 옵션, CLASSPATH 환경변수, 접근지시자 (2) | 2021.08.12 |
[Java] 실수 > 정수 (float to int, double to int) 변환하기 (0) | 2021.05.26 |
[Java] Cipher, 자바의 암호화&복호화를 담당하는 클래스 (2) | 2021.04.20 |
[Java] 표준 API의 함수형 인터페이스, java.util.function 패키지 (0) | 2021.03.07 |
댓글