일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- docker
- 자바 버전
- git push
- gradle
- RequestParam
- aop
- RequestBody
- VUE
- maven
- 트랜잭션
- Vue.js
- 도커
- axios
- PathVariable
- 백엔드
- 빌드
- transaction
- 비동기통신
- Java
- fetch
- java version
- 개발자
- GIT
- vue life cycle
- 프론트엔드
- Spring AOP
- github
- Today
- Total
미소의 세상
Java - Optional 본문
Optional 클래스
Optional<T> 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다.
따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다.
이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.
즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다.
Optional 객체 생성
Optional 객체를 생성하기 위해서는 Optional.of 와 Optional.ofNullable, Optional.empty 3가지를 사용한다.
Optional을 필드로 사용하지 말자.
Optional<String> optString = Optional.of("Hello");
value가 null 인 경우 java.lang.NullPointerException 이 발생한다.
Optional<String> optString = Optional.ofNullable(null);
value가 null 인 경우 비어있는 Optional 반환한다.
Optional<String> emptyOpt = Optional.empty();
비어있는 Optional 객체를 생성한다.
Optional 처리
Optional 처리를 하기 위해 filter, map, flatMap 이 있다.
Optional.of("True").filter((val) -> "True".eqauls(val)).orElse("NO DATA"); // "True"
Optional.of("False").filter((val) -> "True".eqauls(val)).orElse("NO DATA"); // "NO DATA" |
filter( ) 안에 값이 참이면 해당 필터를 통과 시키고 거짓이면 통과 시키지 않는다.
Integer intValue = Optional.of("1").map(Integer::valueOf).orElseThrow(NoSuchElementException::new); // string to integer
mapper 함수를 통해 입력값을 다른 값으로 변환하는 메서드 이다.
String result = Optional.of("result").flatMap((val) -> Optional.of("good")).get(); System.out.println(result); // print 'good' |
mapper 함수를 통해 입력값을 다른 값으로 변환하는 메서드 이다.
map() 과 flatMap 다른점은 메서드 시그니처의 매개변수 이다.
map() 은 제네릭으로 정의한다. flatMap 은 Optional 제네릭으로 정의한다.
flatMap() 메서드가 반환해야 하는 값은 Optional 이다.
Optional 마무리
ifPresent, isPresent, get, orElse, orElseGet, orElseThrow
|
최종적으로 연산을 끝낸 후 값이 비어있지 않다면 입력값으로 주어지고, 비어 있다면 메서드의 내용이 수행되지 않는다.
Optional.ofNullable("test").isPresent(); // true
|
최종적으로 연산을 끝낸 후 객체가 존재하는지 여부를 판별
Optional.of("test").get(); // 'test'
|
객체를 꺼낸다. 비어있다면 예외가 발생한다.
String result = Optional.ofNullable(null).orElse("default");
|
연산을 끝낸 후에 Optional로 객체가 비어있다면 기본값으로 제공할 객체를 지정한다.
Optional 객체가 비어있던 비어있지 않던 반드시 실행한다.
String result = Optional.ofNullable("input").filter("test"::equals).orElseGet(() -> "default");
|
연산을 끝낸 후에 Optional로 객체가 비어있다면 기본값으로 제공할 함수를 지정한다.
Optional 객체가 비어있으면 실행한다. 새로운 객체 생성이나 새로운 연산을 수행하는 경우 사용한다.
Optional.ofNullable("input").filter("test"::equals).orElseThrow(NoSuchElementException::new);
연산 끝낸 후 Optional 객체가 비어있다면 예외 공급자 함수를 통해 예외를 발생시킨다.
'JAVA' 카테고리의 다른 글
Java 버전별 특징 (0) | 2022.10.20 |
---|---|
람다식 (0) | 2022.03.10 |