Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- re.split
- Spring
- 백준 19238
- 프로그래머스
- sql 기술면접
- 백준
- 백준 16236
- 프로래머스
- java
- 백준 16719
- 백준 17779
- with recursive
- MySQL
- spring security
- JVM
- 파이썬
- java 기술면접
- Spring Boot
- spring oauth
- 백준 파이썬
- 백준 16235
- Kotlin
- Coroutine
- 백준 17626
- JPA
- MSA
- 웹어플리케이션 서버
- springboot
- 백준 15685
- spring cloud
Archives
- Today
- Total
시작이 반
[Java] Optional 본문
SMALL
java.util.Optional<T> 클래스
Optional<T>은 T 타입의 객체를 포장해주는 래퍼 클래스(Wrapper class)이다.
예상치 못한 NullPointerException 예외를 Optional에서 제공되는 메소드로 간단히 회피할 수 있다.
null이나 null이 아닌 값을 담을 수 있는 클래스이다.
즉, null값으로 인해 발생하는 예뢰를 처리할 수 있게 된다.
Optional 객체 생성
- Optional.empty() : null을 담고있는, 비어있는 Optional 객체 생성
- Optional.of(value) : value값이 null이 아닌 객체를 담고 있는 Optional객체를 생성, valuel값이 null이 아닌 경우에 사용 null이 넘어올 경우 NPE를 던진다.
- Optional.ofNullable(value) : null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional객체를 생성, value값이 null인지 아닌지 확실하지 않은 경우에 사용
String str = "test";
Optional<String> optStr1 = Optional.empty();
Optional<String> optStr2 = Optional.of(str);
Optional<String> optStr3 = Optional.ofNullable(str);
String nullStr = null;
Optional<String> optStr4 = Optional.empty();
Optional<String> optStr5 = Optional.of(nullStr); //NPE 발생
Optional<String> optStr6 = Optional.ofNullable(nullStr); //empty Optional 객체를 반환함
Optional이 담고 있는 객체 접근 및 사용
default : Optional이 담고 있는 객체가 존재할 경우 동일하게 해당 값을 반환
비어있을 경우
-
get() : 비어있는 Optional 객체에 대해서, NoSuchElementException을 던진다.
String str = "test";
Optional<String> optStr1 = Optional.empty();
Optional<String> optStr2 = Optional.of(str);
Optional<String> optStr3 = Optional.ofNullable(str);
System.out.println(optStr1.get()); //NoSuchElementException
System.out.println(optStr2.get()); //test
System.out.println(optStr3.get()); //test
-
orElse(T other) : 비어있는 Optional 객체에 대해서 인수로 전달된 값을 반환한다.
String str = "test";
Optional<String> optStr1 = Optional.empty();
Optional<String> optStr2 = Optional.of(str);
Optional<String> optStr3 = Optional.ofNullable(str);
System.out.println(optStr1.orElse("null")); //null
System.out.println(optStr2.orElse("null")); //test
System.out.println(optStr3.orElse("null")); //test
- orElseGet(Supplier<? extends T> other) : 비어있는 Optional 객체에 대해서 넘어온 함수형 인자를 통해 생성된 객체를 반환한다.
public static void main(String[] args) {
// write your code here
String str = "test";
Optional<String> optStr1 = Optional.empty();
Optional<String> optStr2 = Optional.of(str);
Optional<String> optStr3 = Optional.ofNullable(str);
System.out.println(optStr1.orElseGet(() -> getDefaultValue())); //함수 return값 반환
System.out.println(optStr2.orElseGet(() -> getDefaultValue())); //test
System.out.println(optStr3.orElseGet(() -> getDefaultValue())); //test
}
public static String getDefaultValue() {
return "함수 return값 반환";
}
- orElseThrow(Supplier<? extends X> exceptionSupplier) : 비어있는 Optional 객체에 대해서 넘어온 함수형 인자를 통해 생성된 예외를 던진다.
String str = "test";
Optional<String> optStr1 = Optional.empty();
Optional<String> optStr2 = Optional.of(str);
Optional<String> optStr3 = Optional.ofNullable(str);
System.out.println(optStr1.orElseThrow(NullPointerException::new)); //NPE
System.out.println(optStr2.orElseThrow(NullPointerException::new)); //test
System.out.println(optStr3.orElseThrow(NullPointerException::new)); //test
하지만 이런 방식은 기존의 null을 체크하는 방식과 다른게 없음 오히려 Optional을 써서 타이핑만 더 치는 안 좋은 방법
- IfPresent() : non-null인 경우 인자로 넘긴 함수를 실행, 비어있는 경우 인자로 넘긴 함수는 실행되지 않는다.
String str = "test";
Optional<String> optStr1 = Optional.ofNullable(str);
Optional<String> optStr2 = Optional.ofNullable(null);
optStr1.ifPresent(s -> System.out.println(s.charAt(0))); //t 프린트
optStr2.ifPresent(s -> System.out.println(s.charAt(0))); //print 안됨
- isPresent() : 해당 값이 있는지 확인 있으면 ture, 없으면 false
LIST
'Programming > Java' 카테고리의 다른 글
[Java] 코테 준비 ( 알아야할 것들) (2) | 2021.08.13 |
---|---|
[Java] SOLID (1) | 2021.05.10 |
[Java] Lombok (0) | 2021.01.25 |
[Java] Stream (0) | 2021.01.20 |
[Java] 람다식(Lambda) (0) | 2021.01.20 |