위로
아래
Optional
Optional 클래스
- null로 인해 발생하는 문제를 줄이고자 자바8부터 도입 (java.util 패키지에 포함)
- null을 사용하지 않고 부재 값을 모델링하기 위하여 도입된 클래스
- Optional 클래스는 부재(null)값을 포함한 데이터를 저장하는 컨테이너이다.
- 종류
- Optional 클래스 : 객체를 위한 옵션 타입
- OptionalInt, OptionalLong, OptionalDouble 클래스 : 숫자를 위한 옵션 타입
Optional 생성
import java.util.*;
public class Optional1Demo {
public static void main(String[] args) {
//옵션 타입 생성
OptionalInt i = OptionalInt.of(100);
OptionalDouble d = OptionalDouble.of(3.14);
Optional<String> s = Optional.of("apple");
//옵션 타입 불러오기
System.out.println(i.getAsInt());
System.out.println(d.getAsDouble());
System.out.println(s.get());
System.out.println(i);
System.out.println(d);
System.out.println(s);
}
}
주요 메소드
- empty() : 빈 Optional 객체를 반환
- get(), getAsInt() : 값을 반환하며, 없다면 예외 발생
- isPresent() : 값의 존재 여부를 true, false로 반환
- ifPresent(Consumer) : 값이 있을 때 Consumer에서 처리
- of(값) : 주어진 값을 Optional 타입으로 변환
- ofNullable(값) : 주어진 값을 Optional 타입으로 변환. 만약 null이라면 빈 Optional을 반환
- orElse(값) : 값이 없을 때 디폴트 값을 지정
empty 예시
더보기
import java.util.*;
public class Optional1Demo {
public static OptionalDouble divide(double x, double y) {
return y == 0 ? OptionalDouble.empty() : OptionalDouble.of(x/y);
}
public static void main(String[] args) {
System.out.println(divide(1.0,2.0));
System.out.println(divide(1.0,0.0));
}
}
ofNullable(), isPresent(), orElse() 예시
더보기
// print 메소드를 정의하는 Util 클래스 파일
public class Util {
public static <T> void print(T t) {
System.out.println(t + " ");
}
public static <T> void printWithParenthesis(T t) {
System.out.println("(" + t + ")");
}
}
// 메인 페이지
import java.util.Optional;
public class Optional2Demo {
public static void main(String[] args) {
String s1 = null;
Optional<String> o = Optional.ofNullable(s1);
if(s1 != null)
Util.print(s1);
else
Util.print("없음");
if(o.isPresent())
Util.print(o.get());
else
Util.print("없음");
String s2 = o.orElse("없음");
Util.print(s2);
o.ifPresentOrElse(Util::print, () -> System.out.println("없음"));
}
}