☕️[Java] Optional.
1️⃣ Optional.
-
Optional
은 Java 8에서 도입된 클래스이며, 주로null
값을 안전하게 처리하기 위해 사용됩니다. -
Optional
은 값이 존재할 수도 있고 존재하지 않을 수도 있는 상황을 표현하는 컨테이너 역할을 하며,null
을 직접 사용하는 것보다 안전하고 명시적인 방법을 제공합니다.
2️⃣ 주요 특징
-
1. 값의 존재 여부를 명확히 표현.
-
Optional
은 값이 존재하는 경우(Optional
이 비어있지 않음)와 값이 존재하지 않는 경우(Optional
이 비어있음)를 명확하게 표현합니다.- 이를 통해
null
참조로 인해 발생할 수 있는 오류를 예방할 수 있습니다.
- 이를 통해
-
-
2. 명시적인 null 처리.
-
Optional
을 사용하면 값이 없을 때 취할 행동을 명시적으로 정의할 수 있습니다.- 이로 인해 코드가 더 읽기 쉬워지고,
NullPointerException
을 피할 수 있습니다.
- 이로 인해 코드가 더 읽기 쉬워지고,
-
-
3. 함수형 프로그래밍 스타일 지원.
-
Optional
은 다양한 메서드(map
,flatMap
,filter
,ifPresent
,orElse
등)를 제공하여 값의 존재 여부에 따라 함수형 프로그래밍 스타일로 작업을 수행할 수 있습니다.
-
3️⃣ Optional
생성.
Optional<String> emptyOptional = Optional.empty();
- 빈
Optional
생성 :Optional.empty()
를 사용하여 비어 있는Optional
을 생성할 수 있습니다.
Optional<String> nonEmptyOptional = Optional.of("Hello");
-
null
이 아닌 값으로Optional
생성.-
Optional.of()
를 사용하여null
이 아닌 값으로Optional
을 생성할 수 있습니다. - 값이
null
인 경우NullPointerException
이 발생합니다.
-
Optional<String> nullableOptional = Optional.ofNullable(null);
-
null
이 될 수 있는 값으로Optional
생성.-
Optional.ofNullable()
을 사용하여 값이null
일 수도 있는 경우Optional
을 생성할 수 있습니다. - 값이
null
이면 빈Optional
이 생성됩니다.Optional<String> nullableOptional = Optional.ofNullable(null);
-
4️⃣ Optional
의 사용 예
-
1. 값이 존재하는지 확인(
isPresent
/ifPresent
)
```java
Optionaloptional = Optional.of("Hello");
if (optional.isPresent()) {
System.out.println(optional.get()); // 값이 있으면 출력
}
optional.ifPresent(value -> System.out.println(value)); // 값이 있으면 람다 표현식 실행
- **2. 값이 없을 때 대체 값 제공(`orElse`, `orElseGet`)**
```java
String result = optional.orElse("Default Value"); // 값이 없으면 "Defaul Value"
String result = optional.orElseGet(() -> "Default Value from Supplier"); // 람다로 대체 값 제공
-
3. 값이 없으면 예외 던지기(orElseThrow)
String result = optional.orElseThrow(() -> new IllegalArgumentException("No value present"));
-
4. 값 변환(
map
,flatMap
)
```java
Optionaloptional = Optional.of("Hello");
Optional
- **5. 조건에 따른 필터링(`filter`)**
```java
Optional<String> optional = Optional.of("Hello");
Optional<String> filtered = optional.filter(value.startsWith("H"));
filtered.ifPresent(System.out::println); // "Hello" 출력
5️⃣ Optional
사용의 이점.
-
1. 명시적 코드 작성.
-
Optional
을 사용하면 코드에서 값이 존재할 수 있는지 여부를 명시적으로 다루게 되어 가독성이 높아집니다.
-
-
2. NullPointerException 방지.
-
Optional
은null
체크를 강제하여NullPointerException
발생을 예방합니다.
-
-
3. 함수형 스타일.
-
Optional
은 함수형 프로그래밍 스타일을 지원하여 간결하고 선언적인 코드를 작성할 수 있게 합니다.
-
6️⃣ Optional
사용 시 주의점.
-
1. 과도한 사용 자제.
- 모든 상황에서
Optional
을 사용하는 것은 오히려 복잡성을 초래할 수 있습니다.- 예를 들어, 필드에
Optional
을 사용하거나, 매우 단순한 로직에Optional
을 사용하는 것은 바람직하지 않을 수 있습니다.
- 예를 들어, 필드에
- 모든 상황에서
-
2. 성능.
-
Optional
은 추가적인 객체를 생성하므로, 성능이 중요한 곳에서는 주의해서 사용해야 합니다.
-
7️⃣ 요약.
-
Optional
은null
을 안전하게 처리하기 위한 클래스이며, 값이 있을 수도 있고 없을 수도 있는 상황을 명시적으로 표현할 수 있게 해줍니다. -
Optional
을 통해 코드의 가독성을 높이고,NullPointerException
을 방지할 수 있습니다. -
Optional
은 함수형 프로그래밍 스타일을 지원하여 코드 작성의 유연성을 제공합니다.