
선택적 개체는 일종의 래퍼 개체입니다. (일반형)
역할 및 목적: 매번 null을 처리하는 것이 귀찮고 잊고 있기 때문에 Java 8부터 null 처리 전용 개체인 선택적 개체가 생성되었습니다. 개체를 선택 사항으로 설정하면 null 값 발생에 대비할 수 있습니다.
영 : 필요한 데이터가 제공되지 않을 때 Java가 자동으로 생성하여 변수 또는 객체에 삽입하는 데이터 유형입니다. 실행 중에 null이 입력되면 대부분의 메서드에서 NullPointException 런타임 오류가 발생하고 프로그램 작업이 중지됩니다.
String s = str == null?”null 발생”:str; 삼항 연산자를 사용하여 0을 처리할 수도 있습니다.
if(str == null) s = “널 발생”
그렇지 않으면 s = str; if 연산자로도 표현할 수 있습니다.
하나. 가능한 경우() : 구현문에서 null이 발견되면 실행되지 않습니다. 나무 상자
– 오류가 없는 경우(값이 존재하는 경우)
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionalExample {
public static void main(String() args) {
List<String> list1 = new ArrayList<>();
list1.add("Hello");
list1.add("Java");
list1.add("World");
//1. ifPresent() --> 실행구문에서 null이 발생하면 실행되지 않도록 함
Optional<List<String>> optional1 = Optional.of(list1);
optional1.ifPresent(s -> System.out.println(s));
}
}
콘솔
(Hello, Java, World)
0이 아닌 데이터 값이 있는 경우 변경 없이 실행되는 것을 확인할 수 있습니다.
– 오류가 발생하는 경우(0에서)
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionalExample {
public static void main(String() args) {
List<String> list1 = new ArrayList<>();
list1.add("Hello");
list1.add("Java");
list1.add("World");
List<String> list2 = null;
//System.out.println(list2.get(0)); --> case1: 그냥 출력
Optional<List<String>> optional2 = Optional.ofNullable(list2);
optional2.ifPresent(s -> System.out.println(s.get(0))); //case2: Optional.ofNullable()을 사용
}
}
콘솔
//case1: 에러문이 나옴
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.List.get(int)" because "list2" is null
//case2: null값이 있어서 실행되지 않음
위와 같이 get() 또는 of()만 사용하면 NullPointerException 오류가 발생합니다. ofNullable()ifPresent()를 사용하면 오류가 발생하지 않으며 실행되지 않습니다.
2. 현재() : 선택적 객체의 값 null 또는 false가 발생하면 false를 반환합니다.그렇지 않으면 True를 반환합니다.
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionalExample {
public static void main(String() args) {
System.out.println(Optional.of("Test").isPresent());
//Optional 객체 안에 값이 있으므로 True 리턴
System.out.println(Optional.ofNullable(null).isPresent());
//Optional 객체에 null이 들어오니까 False 리턴
System.out.println(Optional.of("Test").filter(v -> "est".equals(v)).isPresent());
//Optional 객체에 false값이 생성되기 때문에 False 리턴
}
}
삼. 그렇지 않으면() : 있는 경우 값을 반환합니다.하다, 그렇지 않은 경우 orElse()의 인수 값을 반환합니다.
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionalExample {
public static void main(String() args) {
String a = "ABCD";
String result;
Optional<String> optional3 = Optional.ofNullable(a);
result = optional3.filter(s -> s.startsWith("AB"))
.orElse("AB로 시작하는 단어가 없음");
System.out.println(result);
result = optional3.filter(s -> s.startsWith("X"))
.orElse("X로 시작하는 단어가 없음");
System.out.println(result);
}
}
콘솔
ABCD
X로 시작하는 단어가 없음
orElse()는 아래 예제와 같이 예외 처리에도 사용할 수 있습니다.
4.지도()
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionalExample {
public static void main(String() args) {
System.out.println(Optional.of("XYZ")
.map(String::toLowerCase)
.orElse("오류발생")); //예외처리로도 사용 가능
}
}
콘솔
xyz
![[모던 C++] [모던 C++]](https://and.pageof.kr/wp-content/plugins/contextual-related-posts/default.png)