*Optional 요약

null 레퍼런스의 문제점과 null을 멀리해야하는 이유


null 대신 optional : null로 부터 안전한 도메인 모델 재구현하기


Optional활용 : null확인 코드 제거하기


Optional에 저장된 값을 확인하는 방법


값이 없을 수도 있는 상황을 고려하는 프로그래밍



- 역사적으로 프로그래밍 언어에서는 null레퍼런스로 값이 없는 상황을 표현해왔다.

- 자바 9에서는 값이 있거나 없음을 표현할 수 있는 클래스 java.util.Optional<T>를 제공한다.

- 팩토리 메서드 Optional.empty.Optional.of. Optional.ofNullable 등을 이용해서 Optional객체를 만들 수 있다.

- Optional 클래스는 스트림과 비슷한 연산을 수행하는 map, flatMap, filter 등의 메서드를 제공한다.

- Optional로 값이 없는 상황을 적절하게 처리하도록 강제할 수 있다. 즉, Optional로 예상치 못한 null 예외를 방지할 수 있다.

- Optional을 활용하면 더 좋은 API를 설계할 수 있다. 즉, 사용자는 메서드의 시그니처(메서드 이름 + 파라미터)만 보고도 Optional값이 사용되거나 반환되는지 예측할 수 있다.


*Optional 클래스의 소개


java.util.Optional<T>라는 새로운 클래스를 제공한다. Optional은 선택형값을 캡슐화하는 클래스이다.

예를들어, 어떤 사람이 차를 소유하고 있지 않다면 Person클래스의 car 변수는 null을 가져야 할 것이다. 하지만 새로운 Optional을 이용할 수 있으므로 null을 할당하는 것이 아니라

변수형식을 Optional<Car>로 설정할 수 있다.


Optional<Car>가 Car형식의 객체를 포함 하던지

Optional<Car>가 빈 Optional이든지


값이 있으면 Optional클래스는 값을 감싼다. 없으면 Optional.empty 메서드로 Optional을 반환한다.

Optional.empty는 Optional의 특별한 싱글턴 인스턴스를 반환하는 정적 팩토리 메서드이다. null 레퍼런스와 Optional.empty()는 서로 무엇이 다른지 궁금하다.

null을 참조하려면 NullPointerException이 발생하지만, Optional.empty()는 Optional객체이므로 이를 다양한 방식으로 활용할 수 있다.


null대신 Optional을 사용하면서 Car형식이 Optional<Car>로 바뀌었다. 이는 값이 없을 수 있음을 명시적으로 보여준다. 반면 Car형식을 사용했을때는 Car에 null레퍼런스가 할당될 수 있는데 이것이 올바른 값인지 아니면 잘못된 값인지 판단할 아무 정보도 없다.



+ Recent posts