바위 뚫는중

[Spring] Optional 이란? 본문

JAVA

[Spring] Optional 이란?

devran 2023. 9. 7. 01:29
반응형

매일 하나의 객체만 기록하는 캘린더가 있다고 쳤을때, Optional과 List중 무엇으로 처리해줄지 고민했었다.

내가 만드는 건 하루에 하나의 기록 객체만(객체 안에는 여러 변수들이 존재함) 담는 캘린더이다.

즉, 일반적인 캘린더를 예로 든다면? 하루에 일정을 하나만 추가하는 느낌이다. 일기를 하나만 쓰는 느낌.

이때 오늘 기록이 있으면 수정하고, 없으면 생성하는 로직을 생각했었다.

찾아보니 다중 값이 아니어서 List를 굳이 쓸 이유를 느끼지 못했고, Optional을 알게되어 코드를 변경하게 됐다.

Optional과 List의 주요 차이점은 값의 존재 여부와 다중 값 처리!!

Optional

Java8에서는 Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 도와준다.

Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 때문에 각종 메소드를 제공해준다.

  • 값이 존재할 수도 있고 존재하지 않을 수도 있는 상황을 다루는 래퍼 클래스
  • 보통 메서드의 반환 값으로 사용되며, 반환 값을 명시적으로 "값이 없음"을 나타내기 위해 사용
  • 값의 존재 여부를 isPresent() 메서드로 확인하고, 값이 존재할 때만 get() 메서드를 사용하여 실제 값을 얻을 수 있음
  • Optional은 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용

아래는 서비스 단의 코드인데, 이렇듯 값이 존재하면 List로 반환해주고, 없으면 빈 리스트를 반환해줄 때 유용하게 쓰이는 듯 하다.

참고로 Collections.singlentonList는 단일요소 반환에 쓰이고, 값이 불변하며 사이즈가 1이다 (지정된 단일 객체를 가리키는 주소값을 가지기 때문임)

List

  • 여러 값을 저장하고 관리하는 컬렉션, 여러 요소를 포함할 수 있으며 순서가 있고 중복 값을 허용
  • 주로 여러 값을 모아서 반환할 때 사용, 하나 이상의 값을 포함하는 목록을 나타냄
  • 여러 값을 저장하고 순회할 수 있으며, null 또는 빈 목록일 때 처리가 가능

즉 요약하면, Optional은 값의 존재 여부를 다루며 단일 값 반환에 사용되고, List는 여러 값을 다루며 목록 형태로 여러 값을 반환할 때 사용된다고 한다. 그러나,,, 잘못된 사용은 금물이고 더 자세한 내용은 밑에 첨부한 블로그에 가면 모조리 확인할 수 있다.

아주 잘 정리된 블로그 정말 완벽한 글이었다 .. 공부는 여기서 한다..

https://mangkyu.tistory.com/70

https://mangkyu.tistory.com/203

반응형

'JAVA' 카테고리의 다른 글

[Ubuntu, Docker Container] 자바 버전 변경하는 방법  (0) 2021.11.18