글 작성자: juyoungit

Optional이 지향하는 핵심적인 내용은 바로 "null"을 직접 다루지 말고 Optional 객체에 넣어서 관리하자! 라는 부분이다. 즉, null을 직접 다루는 것이 아니라 Optional Object라는 중간다리를 통해 관리함으로서 NPE(= NullPointerException)의 발생가능성을 최대한 줄이겠다는 목적을 가지고 탄생한 것이라고 볼 수 있다.

 

여기서 NPE를 최대한 피하려고 하는 구체적인 이유는 개발하는 프로그램의 size가 커진 경우, NPE의 발생은 디버깅이 어렵기 때문이다.

Optional Object를 통해서 

Optional

null value handling을 위해서 java 8부터 새롭게 추가된 개념
  • java에서는 null value 때문에 상당히 많은 수의 NPE(= NullPointerException) 가 발생함
  • 그래서 이 NPE의 발생을 방지하기 위해서 작성하는 로직이 source code의 가독성을 저하시킴
  • 이와 관련된 다양한 종류의 method 들이 java에서 지원됨. ⇒ 버전업이 진행되면서 새로운 것들이 추가되기도 함
    • Optional.of
    value가 null인 경우 NPE 예외를 던짐, 반드시 값이 있어야 하는 object인 경우 해당 method를 사용할 수 있음
    • Optional.ofNullable
    value가 null인 경우 비어있는 Optional을 반환, 값이 null 일수도 있는 object인 경우 해당 method를 사용할 수 있음
    • Optional.empty
    비어있는 Optional 객체를 생성, 조건에 따라 분기를 태워줘야하며 반환값이 없는 경우에도 사용될 수 있음
    • filter
    predicate 값이 참인 경우 해당 filter를 통과시키고, 거짓이면 통과시키지 않음.
    • map
    mapper 함수를 통해 입력값을 다른 값으로 변환하는 method
    • flatMap
    무슨 뜻인지 솔직히 잘 모르겠음...
    • ifPresent
    • isPresent
    최종적으로 연산을 마친 후 해당 객체가 존재하는 지에 대한 여부를 판별함
    • get
    최종적으로 연산 후 객체를 꺼냄, 이 때 비어있는 Optional 객체인 경우 예외가 발생하게 됨
    • orElse
    최종적으로 연산을 끝낸 후에도 Optional 객체가 비어있는 경우 기본값으로 제공할 객체를 지정함
    • orElseGet
    최종적으로 연산을 끝낸 후에도 Optional 객체가 비어있다면 기본값으로 제공할 공급자 함수를 지정함
    • orElseThrow
    최종적으로 연산을 끝낸 후에도 Optional 객체가 비어있다면 예외 공급자 함수를 통해서 예외를 발생시킴
  • 여기서 종단처리의 의미는 Optional 객체의 chaning을 끝냄을 의미함.
  • Optional 객체를 생성한 후 사용 가능한 method, 해당 method들은 다시 Optional 객체를 반환하기 때문에 method chaning을 통해서 원하는 로직 반복삽입 가능
  • (Optional의 종단처리와 관련된 method들)
  • (Optional의 중간처리와 관련된 method들)
  • (Optional의 생성과 관련된 method들)

(이후에 관련 구체적인 개념들을 추후에 다시 업데이트 하는 것으로 하겠음)

'Web Backend > Java' 카테고리의 다른 글

OOP(Object Oriented Programming language) 개념  (0) 2021.06.29
Java 에 대한 기본적인 정리  (0) 2021.06.29
enum  (0) 2021.06.28
Map & HashMap의 차이점  (0) 2021.06.28
LocalDateTime  (0) 2021.06.28