[Java] Optional이란? (value-based)
java.util.Optional
extends Object
Optional
Null일 가능성이 있는 값을 담을 수 있는 컨테이너 객체이다.
값이 존재한다면(non-null) isPresent()
가 true
를 리턴하고, get()
을 사용하여 값을 꺼낼 수 있다.
포함된 값의 유무에 따라 다르게 동작하는 함수를 제공한다.
orElse()
: 값이 없다면 디폴트 값을 리턴ifPresent()
: 값이 있으면 코드 블럭 실행
Optional은 value-based 클래스이다.
따라서 identity-sensitive 연산(참조 동일성(==), id hash code, 동기화 등)을 사용하면 예기치 않은 결과가 발생할 수 있으므로 피해야 한다.
value-based?
- final and immutable(mutable 객체에 대한 참조는 포함 가능)
- equals, hashCode, toString의 구현을 가짐
- 인스턴스 상태에서만 사용 가능 - 인스턴스 간 참조 동일성(==), 인스턴스의 identity hash code, 인스턴스의 고유 lock에 대한 동기화 등과 같은 identity-sensitive 연산은 사용하지 않음
- 참조 동일성(==) 말고 equals()를 기준으로 동일성 판단
- 접근 가능한 생성자는 없지만, 팩토리 메서드(반환된 인스턴스의 identity에 대해 아무런 작업을 하지 않음)를 통해 인스턴스화된다.(?)
Use?
- '결과 없음'을 나타낼 필요가 있는데 null을 사용하면 오류가 발생할 수 있는 메서드의 반환 유형으로 사용
- Optional인 변수는 스스로 null이 아니어야 하며, 항상 Optional 인스턴스를 가리켜야 함
참고
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html
Author And Source
이 문제에 관하여([Java] Optional이란? (value-based)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kdkeiie8/Java-Optional-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)