-
Optional<T>란?PROGRAMMING/JAVA 2023. 1. 1. 00:00
- 요즘은 getById(Long id) 처럼 값이 null이 나올 수 있는 경우를 Optional<T>로 처리하는 것을 선호한다고 한다.
- 예를 들어 예전엔 if(a == null) { ... } 이렇게 사용했다. 지금은 저렇게 값을 직접 꺼내는 걸 선호하지 않는다. Optional을 사용하면 ifPresent를 사용해서 result.ifPresent(m1 -> { 이미 존재하는 회원 예외 던지기} ); 이런 식으로 사용 가능하다.
- 그리고 ifElseGet()도 많이 사용한다고 한다. 값이 있으면 꺼내고, 없으면 지정한 걸 실행해! 이런 거.
그래서 자바 oracle doc에서 찾음!
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Optional.html
Optional (Java SE 16 & JDK 16)
Type Parameters: T - the type of value public final class Optional extends Object A container object which may or may not contain a non-null value. If a value is present, isPresent() returns true. If no value is present, the object is considered empty and
docs.oracle.com
java.lang.Object / java.util.Optional<T>
- non-null 값을 포함하거나 포함하지 않을 수 있는 컨테이너 객체이다.
- 값이 존재한다면 isPresent()가 true를 반환한다. (void던데 어떻게 하는 거지 어디다가 담는 건가)
- 값이 존재하지 않는다면, 객체가 비어있다고 가정하고 isPresent()가 false를 반환한다.
- 값이 제공되느냐 아니냐에 따라서, orElse()(값이 없으면 기본값 반환)나 ifPresent()(값이 존재하면 작업 수행)와 같은 추가 메서드가 제공된다.
- value-base 클래스이기에 instances를 교환 가능한 것으로 취급해야 한다 (???).
- Optional은 기본적으로 no result를 나타내야 하기에 절대 타입이 Optional인 변수가 자기자신이 null을 가져서는 안 된다. Optional<T> o = null; 이게 안 된다고 하는 건가?
왠지 궁금증은 커져가지만. 알게 된 건 null을 관리할 때 사용 가능할 객체라는 점이다.



'PROGRAMMING > JAVA' 카테고리의 다른 글
그러니까 ... bean이 ... jsp 빈이 ... spring 빈이 ... dto가 ... 뭐? (0) 2023.01.10 그래서 Servlet은 html페이지를 반환하는 건가? (0) 2023.01.05 extends와 implements의 차이 : 인터페이스가 인터페이스를 extends하는 이유 (0) 2022.12.29 [ JAVA ] 내가 생각하는 직렬화. 왜 직렬화를 사용하는 걸까? (1) 2022.12.22 내가 생각하는 추상클래스와 인터페이스의 차이 (0) 2022.12.12