<aside>
1️⃣ Optional이란?
</aside>
- **
Optional
**은 값이 존재할 수도 있고 존재하지 않을 수도 있는 래퍼 클래스이다. Optional
객체를 사용하여 값의 존재 여부를 명시적으로 표현하고, 그에 따른 로직을 구현할 수 있다.
- 상황에 따라 Optional을 적절하게 활용하면 코드의 안정성과 가독성을 높일 수 있으며, Null 관련 오류를 방지할 수 있다. 하지만 모든 상황에서 Optional을 사용하는 것이 항상 필요한 것은 아니므로, 사용하는 상황과 코드의 특성을 고려하여 적절히 활용해야 한다.
<aside>
2️⃣ Optional의 장점
</aside>
- Null 체크와 NullPointerException 방지
- Optional은 값의 존재 여부를 명시적으로 표현하여 Null 값을 처리하는 데 도움을 준다. Null 체크를 수동으로 하지 않고도 Optional을 사용하여 NullPointerException을 방지할 수 있다.
- 읽기 쉬운 코드
- Optional을 사용하면 코드의 의도가 더욱 명확하게 표현된다. 값의 존재 여부를 확인하고, 값을 가져오거나 기본값을 설정하는 등의 작업을 직관적으로 표현할 수 있다.
- 메서드 체이닝과 함수형 스타일
- Optional은 메서드 체이닝과 함수형 프로그래밍 스타일을 지원하여 간결하고 가독성이 높은 코드를 작성할 수 있다.
<aside>
3️⃣ 주로 사용되는 코드 및 상황
</aside>
- 메서드의 반환 값
- 메서드가 값의 존재 여부에 따라 다른 결과를 반환해야 할 때 Optional을 사용할 수 있다. 예를 들어, 데이터베이스에서 사용자를 조회하는 메서드는 사용자를 찾은 경우에는 Optional에 사용자를 감싸서 반환하고, 사용자를 찾지 못한 경우에는 빈 Optional을 반환할 수 있다.
- 외부 데이터 또는 리소스 접근
- 외부 API 호출, 파일 읽기 등의 작업에서 Optional을 사용하여 값의 존재 여부를 확인하고, 값을 가져올 수 있다. 이를 통해 예외 처리를 간편하게 수행하고, 기본값을 사용할 수 있다.
- 컬렉션과 스트림
- 컬렉션 또는 스트림에서 요소를 가져올 때, Optional을 사용하여 값의 존재 여부를 명시적으로 표현할 수 있다. 컬렉션 또는 스트림에서 요소를 찾을 때, Optional을 사용하여 요소의 유무를 확인하고 작업을 수행할 수 있다.
- 자바 8의 기능과 연동
- 자바 8에서 추가된 기능인 람다 표현식, 스트림 API 등과 함께 Optional을 사용하면 강력한 기능을 발휘할 수 있다. 예를 들어, 스트림에서 Optional을 활용하여 필터링, 매핑 등의 작업을 수행할 수 있다.
<aside>
4️⃣ 메서드 설명
</aside>
- **isPresent()**와 get()
isPresent()
메서드는 Optional 객체에 값이 존재하는지 여부를 확인한다.
get()
메서드는 Optional 객체에 값이 존재할 경우 해당 값을 반환한다.
- 위의 예시 코드에서는 **
isPresent()
**를 사용하여 값의 존재 여부를 확인한 후, **get()
**을 사용하여 값에 접근하고 출력한다.
Optional<String> optionalValue = Optional.of("Hello");
if (optionalValue.isPresent()) {
String value = optionalValue.get();
System.out.println(value); // 출력: Hello
}
- orElse()