Opitonal<T>
1. Integer나 Double 클래스처럼 'T' 타입의 객체를 포장하는 Wrapper Class
2. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장 가능
3. NullPointerException 예외를 예방하기 위한 좋은 방법 (손쉬운 null값 처리)
4. 시작(객체생성)-중간(연산 후, Optional객체반환)-종단(체이닝종료)의 3단계를 구현할 수 있다.
5. 함수형 프로그래밍, 메소드 체이닝을 가능하게 한다.
객체생성
1. of( )
- null이 아닌 명시된 값을 저장한 Optional 객체를 반환
- null이 저장될 경우, NullPointerException 예외를 발생시킴
2. ofNullable( )
- null이 아닌 명시된 값을 저장한 Optional 객체를 반환
- null이 저장될 경우, 비어있는 Optional 객체를 반환
3. empty( )
- 비어있는 Optional 객체를 바난
중간처리
1. filter( )
- predicate 값이 참이면 기존 Optional 객체를 그대로 반환
- predicate 값이 거짓이면 비어있는 Optional 객체를 반환
※ predicate는 Functional Interface로, 매개변수를 특정 연산으로 체크하여 boolean값을 반환한다.
(특정 연산 = 람다식으로 표현된다)
2. map( )
- Optional 객체에 저장된 값을 map( ) 내의 함수를 통해 변환하고, 변환값을 담은 Optional 객체를 반환
종단처리
1. ifPresent( )
- Optional 객체가 비어있지 않다면, 저장된 값을 가지고 ifPresent( ) 내의 연산을 수행한다.
- Optional 객체가 비어있다면, 그대로 반환 (아무 연산 수행X)
2. isPresent( )
- Optional 객체가 비어있지 않다면, true를 반환
- Optional 객체가 비어있다면, false를 반환
3. get( )
- Optional 객체가 비어있지 않다면, 저장된 값을 꺼내 반환
- Optional 객체가 비어있다면, NoSuchElementException을 Throw
4. orElse( )
- Optional 객체가 비어있지 않다면, 그대로 반환 (아무 연산 수행X)
- Optioanl 객체가 비어있다면, 기본값으로 제공할 객체 지정
5. orElseGet( )
- Optional 객체가 비어있지 않다면, 그대로 반환 (아무 연산 수행X)
- Optional 객체가 비어있다면, 기본값으로 제공할 공급자 함수 지정(람다 표현식의 결괏값 반환)
6. orElseThrow( )
- Optional 객체가 비어있지 않다면, 그대로 반환 (아무 연산 수행X)
- Optional 객체가 비어있다면, 기본값으로 제공할 예외 공급자 함수 지정하여 예외 Throw
※ orElse vs orElseGet
- orElse는 Optional 객체가 비어있든 말든 반드시 실행.
- 즉, 기본값을 구하는 연산이 있다면 반드시 실행된다는 의미.
- orElseGet은 비어있을 때만 실행.
- 이 차이점을 생각하고 활용하자.
참고
'학습 > Java' 카테고리의 다른 글
[java] Proxy Pattern (0) | 2020.03.23 |
---|---|
[java] Annotation Processor란? (추가공부 필요) (0) | 2020.03.21 |
[java] Enum의 개념과 사용법 (0) | 2020.02.23 |
[java] Mustache 사용하기 (3) | 2020.02.15 |
[java] 템플릿 엔진 / SSR & CSR / JSP와 Mustache / 정적파일 (0) | 2020.02.10 |
댓글