[Java] Optional이란? (value-based)

1319 단어 JavaJava
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

좋은 웹페이지 즐겨찾기