반응형
Java 8의 Optional 클래스와 관련된 다양한 메서드들을 정리하고, 각 메서드에 대한 예제를 작성해 보겠습니다.
1. Optional 만들기
- Optional.of(): null이 아닌 값을 가지는 Optional을 생성합니다.
- Optional.ofNullable(): 값이 null일 수 있는 Optional을 생성합니다.
- Optional.empty(): 비어있는 Optional을 생성합니다.
Optional<String> optional1 = Optional.of("Hello"); // "Hello"를 포함하는 Optional 생성
Optional<String> optional2 = Optional.ofNullable(null); // null을 허용하는 Optional 생성
Optional<String> optional3 = Optional.empty(); // 비어있는 Optional 생성
2. Optional에 값이 있는지 없는지 확인하기
- isPresent(): 값이 존재하는지 확인합니다.
- isEmpty(): 값이 존재하지 않는지 확인합니다. (Java 11부터 제공)
Optional<String> optional = Optional.of("Hello");
if (optional.isPresent()) {
System.out.println("Value is present");
}
if (optional.isEmpty()) { // Java 11부터 사용 가능
System.out.println("Value is empty");
}
3. Optional에 있는 값 가져오기
- get(): 값을 가져옵니다. 값이 없으면 NoSuchElementException을 던집니다.
Optional<String> optional = Optional.of("Hello");
String value = optional.get(); // "Hello" 반환
4. Optional에 값이 있는 경우에 그 값을 가지고 ~~를 하라
- ifPresent(Consumer): 값이 존재하면 Consumer를 실행합니다.
Optional<String> optional = Optional.of("Spring Course");
optional.ifPresent(value -> {
if (value.startsWith("Spring")) {
System.out.println("Course ID: 123");
}
});
5. Optional에 값이 있으면 가져오고 없는 경우에 ~~를 리턴하라
- orElse(T): 값이 없으면 기본값을 리턴합니다.
Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElse("Default Course"); // "Default Course" 반환
6. Optional에 값이 있으면 가져오고 없는 경우에 ~~를 하라
- orElseGet(Supplier): 값이 없으면 Supplier를 실행하여 값을 리턴합니다.
Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElseGet(() -> "Created New Course"); // "Created New Course" 반환
7. Optional에 값이 있으면 가져오고 없는 경우 에러를 던져라
- orElseThrow(): 값이 없으면 예외를 던집니다.
Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElseThrow(() -> new IllegalArgumentException("No value present"));
8. Optional에 들어있는 값 걸러내기
- filter(Predicate): 값이 Predicate를 만족하면 값을 포함하는 Optional을 반환합니다.
Optional<String> optional = Optional.of("Spring Course");
optional.filter(value -> value.startsWith("Spring"))
.ifPresent(System.out::println); // "Spring Course" 출력
9. Optional에 들어있는 값 변환하기
- map(Function): 값을 변환하여 새로운 Optional을 반환합니다.
- flatMap(Function): Optional 안에 들어있는 인스턴스가 Optional인 경우 사용합니다.
Optional<String> optional = Optional.of("Spring Course");
// map 사용 예
Optional<Integer> lengthOptional = optional.map(String::length);
lengthOptional.ifPresent(System.out::println); // 13 출력
// flatMap 사용 예
Optional<Optional<String>> nestedOptional = Optional.of(Optional.of("Nested Value"));
nestedOptional.flatMap(Function.identity())
.ifPresent(System.out::println); // "Nested Value" 출력
종합 예제
다양한 Optional 메서드를 사용하는 예제 코드를 보여드리겠습니다.
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
// 1. Optional 만들기
Optional<String> optional1 = Optional.of("Hello");
Optional<String> optional2 = Optional.ofNullable(null);
Optional<String> optional3 = Optional.empty();
// 2. Optional에 값이 있는지 없는지 확인하기
if (optional1.isPresent()) {
System.out.println("Value is present: " + optional1.get());
}
if (optional3.isEmpty()) {
System.out.println("Value is empty");
}
// 3. Optional에 있는 값 가져오기
try {
String value = optional2.get(); // NoSuchElementException 발생
} catch (Exception e) {
System.out.println("Caught exception: " + e);
}
// 4. Optional에 값이 있는 경우에 그 값을 가지고 ~~를 하라
optional1.ifPresent(value -> System.out.println("Value is: " + value));
// 5. Optional에 값이 있으면 가져오고 없는 경우에 ~~를 리턴하라
String defaultValue = optional2.orElse("Default Value");
System.out.println("Default value: " + defaultValue);
// 6. Optional에 값이 있으면 가져오고 없는 경우에 ~~를 하라
String orElseGetValue = optional2.orElseGet(() -> "Created New Value");
System.out.println("OrElseGet value: " + orElseGetValue);
// 7. Optional에 값이 있으면 가져오고 없는 경우 에러를 던져라
try {
String orElseThrowValue = optional2.orElseThrow(() -> new IllegalArgumentException("No value present"));
} catch (Exception e) {
System.out.println("Caught exception: " + e);
}
// 8. Optional에 들어있는 값 걸러내기
Optional<String> filteredOptional = optional1.filter(value -> value.startsWith("H"));
filteredOptional.ifPresent(value -> System.out.println("Filtered value: " + value));
// 9. Optional에 들어있는 값 변환하기
Optional<Integer> lengthOptional = optional1.map(String::length);
lengthOptional.ifPresent(length -> System.out.println("Length: " + length));
Optional<Optional<String>> nestedOptional = Optional.of(Optional.of("Nested Value"));
nestedOptional.flatMap(Function.identity())
.ifPresent(nestedValue -> System.out.println("Nested value: " + nestedValue));
}
}
이 예제는 다양한 Optional 메서드를 사용하는 방법을 보여줍니다. 각 메서드가 어떻게 동작하는지, 어떤 상황에서 사용해야 하는지 이해하는 데 도움이 될 것입니다.
반응형
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[java8] 인터페이스의 디폴트 메서드, 스태틱 메서드 (0) | 2024.06.14 |
---|---|
[Java8] Optional을 사용할 때 주의해야 할 사항과 관련된 예제 소스 (0) | 2024.06.12 |
[Java] 가변객체, 불변객체 (1) | 2023.03.30 |
[Java] String, StringBuilder, StringBuffer 차이점 (0) | 2023.03.30 |
[JAVA] StringBuilder 메서드 별 간단한 사용 예제 (0) | 2023.03.29 |