Java Optional
by 볼빵빵오춘기Optional <T>
T타입 객체의 래퍼클래스 - Optional <T>
T 에 모든 종류의 객체 저장가능 ⇒ null 도 가능
null을 직접다루는 것은 위험 why? NullpointException 발생가능
null 체크 > if문 필수 > 코드가 지저분해짐
⇒ 위의 문제를 해결하기 위해 사용한다.
더보기
예를 들면,
Object result = getResult();
위의 코드를 보면 반환값은 null 또는 객체 가 반환될것이다.
if(result!= null)
println(result.toString());
그렇기 때문에 이런 문제를 해결하고자 Optional <T>사용한다.
null 값을 직접 다루는 것이 아니라 Optional 객체에 null을 넣는다.
따라서 result는 null이지만 null이 아닌것이 된다.
Optional <T> 객체 생성하기
Optional <T>객체를 생성하는 다양한 방법
⇒ null 대신 빈 Optional <T>객체를 사용하자!
Optional <T> 객체의 값 가져오기
- Optional 객체의 값 가져오기 - get(), orElse(), orElseGet(), orElseThrow()
- isParesent() - Optional 객체의 값이 null이면 false, 아니면 true를 반환한다.
예제 코드
더보기
package ch14Try;
import java.util.Optional;
public class Ex14_0 {
public static void main(String[] args) {
//int[] arr = null // error
int[] arr = new int[0];
System.out.println(arr.length);
// Optional<String> opt = null; // 에러가 나지는 않지만 바람직하지 않음
Optional<String> opt = Optional.empty();
System.out.println(opt);
String str ="";
// try {
// str = opt.get();
// }catch(Exception e) {
// str = ""; // 예외가 발생하면 빈문자열("")로 초기
// }
str = opt.orElse("EMPTY");
System.out.println(str);
}
}
과값
0
Optional.empty
EMPTY
OptionalInt, OptionalLong, OptionalDouble
- 기본형 값을 감싸는 래퍼 클래스이다.
- OptionalInt의 값 가져오기 - int getAsInt()
※ 빈 Optional객체와의 비교
OptionalInt opt = OptionalInt.of(0); // Optional에 0을 저장
OptionalInt opt2 = OptionalInt.empty; // Optional에 0을 저장
예제 코드
더보기
import java.util.Optional;
import java.util.OptionalInt;
public class Ex14_0 {
public static void main(String[] args) {
Optional<String> optStr = Optional.of("abcde");
Optional<Integer> optInt = optStr.map(String::length);
System.out.println("optStr="+optStr.get());
System.out.println("optInt="+optInt.get());
int result1 = Optional.of("123")
.filter(x->x.length() >0)
.map(Integer::parseInt).get();
int result2 = Optional.of("")
.filter(x->x.length() >0)
.map(Integer::parseInt).orElse(-1);
System.out.println("result1="+result1);
System.out.println("result2="+result2);
Optional.of("456").map(Integer::parseInt)
.ifPresent(x->System.out.printf("result3=%d%n",x));
OptionalInt optInt1 = OptionalInt.of(0); // 0을 저장
OptionalInt optInt2 = OptionalInt.empty(); // 빈 객체를 생성
System.out.println(optInt1.isPresent()); // true
System.out.println(optInt2.isPresent()); // false
System.out.println(optInt1.getAsInt()); // 0
// System.out.println(optInt2.getAsInt()); // NoSuchElementException
System.out.println("optInt1="+optInt1);
System.out.println("optInt2="+optInt2);
System.out.println("optInt1.equals(optInt2)?"+optInt1.equals(optInt2));
}
}
optStr=abcde
optInt=5
result1=123
result2=-1
result3=456
true
false
0
optInt1=OptionalInt[0]
optInt2=OptionalInt.empty
optInt1.equals(optInt2)?false
블로그의 정보
Hello 춘기's world
볼빵빵오춘기