Optional
널이 들어있는 레퍼런스 변수의 멤버에 접근 하려고 할때 발생하는 NullPointException을 우아하게 해결하기 위해 등장
package EBD._3;
public class Main1 {
private static String getSomeString() {
return null;
}
public static void main(String[] args) {
String isThisNull = getSomeString();
// 만약 null을 체크하지않으면 NullPointException 발생
if (null != isThisNull) {
System.out.println(isThisNull.toUpperCase());
}
}
}
Exception in thread "main" java.lang.NullPointerException
at EBD._3.Main1.main(Main1.java:14)
optional로 선언된 메서드에서 반환된 문자열이 비어 있지 않은 경우에는 ifPresent의 인자로 들어간 람다표현식을 실행
비어있으면 실행 X
package EBD._3;
import java.util.Optional;
public class Main1 {
private static Optional<String> getSomeString() {
return Optional.empty(); // null을 반환하는 것이 아니라 비어 있는 Optional을 반환
}
public static void main(String[] args) {
Optional<String> isThisNull = getSomeString();
isThisNull.ifPresent(str -> System.out.println(str.toUpperCase()));
}
}
비어있는 Optional이 아니라 값을 포함시 작성법
package EBD._3;
import java.util.Optional;
public class Main1 {
private static Optional<String> getSomeString() {
return Optional.ofNullable("public static void"); // null을 반환하는 것이 아니라 비어 있는 Optional을 반환
}
public static void main(String[] args) {
Optional<String> isThisNull = getSomeString();
isThisNull.ifPresent(str -> System.out.println(str.toUpperCase()));
}
// PUBLIC STATIC VOID
}
package EBD._3;
import java.util.Optional;
public class Main1 {
private static Optional<String> getSomeString() {
return Optional.ofNullable("public static void"); // null을 반환하는 것이 아니라 비어 있는 Optional을 반환
}
public static void main(String[] args) {
Optional<String> str = getSomeString();
// 안티패턴
// if (str.isEmpty()) {
// System.out.println(str.get().toUpperCase());
// }
str.ifPresent((string) -> System.out.println(string.toUpperCase()));
}
}
실행결과 : // PUBLIC STATIC VOID