728x90
Optional란 ?
Java의 Optional 클래스는 java.util 패키지에 포함되어 있으며, 값이 없는 경우를 표현하기 위한 클래스입니다.
Optional<T>는 제네릭 클래스로, 모든 객체 타입을 감쌀 수 있습니다.
주요 특징
- 내부적으로 객체 참조를 저장하며, null이 아닌 값을 감쌀 수 있음.
- null 대신 값을 감싸거나, 비어 있는 상태를 표현(Optional.empty()) 가능.
- 비용이 큼: 객체 참조를 저장하므로, 기본형 타입(int, double, 등)을 감쌀 때 박싱(Boxing)이 발생.
사용 예시
Optional<Integer> optionalValue = Optional.of(42);
optionalValue.ifPresent(value -> System.out.println("Value: " + value));
OptionalInt란?
OptionalInt는 Java 8에서 도입된 프리미티브 타입 int를 위한 특별한 Optional 클래스입니다. 기본형 int 타입의 값을 감싸거나, 값이 없는 경우를 표현하기 위한 Optional의 특수화 클래스입니다.
주요 특징
1. 값의 유무를 표현
- OptionalInt는 값을 감싸거나(OptionalInt.of(값)), 비어 있는 상태(OptionalInt.empty())를 표현할 수 있습니다.
2. 기본형 int에 최적화
- Optional<T>와 달리,
제네릭이 아닌 기본형 int에 특화되어 있습니다. 박싱(Boxing)과언박싱(Unboxing)이 없으므로 성능적으로 효율적입니다.
3. 유틸리티 메서드 제공
- 값을 처리하거나 기본값을 반환하는 데 유용한 메서드들이 포함되어 있습니다.
OptionalInt의 주요 메서드
메서드 | 설명 |
static OptionalInt empty() | 비어 있는 OptionalInt 객체를 생성합니다. |
static OptionalInt of(int value) | 값을 포함하는 OptionalInt 객체를 생성합니다. |
boolean isPresent() | 값이 있는지 확인합니다. (true이면 값이 존재, false이면 비어 있음) |
int getAsInt() | 값이 존재하면 반환하고, 값이 없으면 예외를 던집니다. (NoSuchElementException) |
int orElse(int other) | 값이 없으면 기본값을 반환합니다. |
void ifPresent(IntConsumer action) | 값이 존재하면 제공된 람다식(또는 메서드 참조)을 실행합니다. |
OptionalInt의 사용 예시
값이 있는 경우
OptionalInt optionalInt = OptionalInt.of(42);
if (optionalInt.isPresent()) {
System.out.println("Value: " + optionalInt.getAsInt()); // 출력: Value: 42
}
값이 없는 경우
OptionalInt optionalInt = OptionalInt.empty();
System.out.println("Is present: " + optionalInt.isPresent()); // 출력: Is present: false
System.out.println("Value or default: " + optionalInt.orElse(0)); // 출력: Value or default: 0
isPresent()
OptionalInt optionalInt = OptionalInt.of(100);
optionalInt.ifPresent(value -> System.out.println("Value: " + value)); // 출력: Value: 100
최댓값 찾기
import java.util.OptionalInt;
import java.util.Arrays;
public class MaxValueExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// 1. OptionalInt로 최대값을 받기
OptionalInt optionalMax = Arrays.stream(arr).max();
if (optionalMax.isPresent()) {
System.out.println("OptionalInt 최대값: " + optionalMax.getAsInt());
} else {
System.out.println("배열이 비어 있습니다.");
}
// 2. getAsInt()를 사용하여 int로 최대값을 받기
// getAsInt()를 사용한 경우, OptionalInt를 직접 다루지 않고 int로 값을 바로 추출
int intlMax = Arrays.stream(arr).max().getAsInt();
System.out.println("int 최대값: " + intlMax);
}
}
- OptionalInt 사용
- Arrays.stream(arr).max()는 OptionalInt를 반환합니다.
- 이 값을 optionalMax 변수에 저장한 후, isPresent()로 값이 있는지 확인하고, 존재하면 getAsInt()로 값을 추출합니다.
- getAsInt() 사용
- Arrays.stream(arr).max().getAsInt()는 max()에서 반환된 OptionalInt 객체에서 값을 바로 추출합니다.
- 이 경우, 값이 없으면 예외(NoSuchElementException)가 발생합니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.11.20 - 비트마스크를 이용한 백준-집합 문제 풀이 (1) | 2024.11.20 |
---|---|
[TIL, 일일 회고] 2024.11.18 - 박싱(Boxing)과 언박싱(UnBoxing) (2) | 2024.11.18 |
[TIL, 일일 회고] 2024.11.16 - int, long, BigInteger: 자료형 선택 기준 알아보기 (0) | 2024.11.16 |
[TIL, 일일 회고] 2024.11.15 - STAR 기법이란 무엇일까❓ (0) | 2024.11.15 |
[TIL, 일일 회고] 2024.11.14 - A/B 테스트: 데이터 기반 의사결정의 힘 (0) | 2024.11.14 |