헉!!/jsp, java
[Java] Optional
권태성
2024. 7. 20. 23:55
app.getProgress().getStudyDuration()과 같이 호출 할 때 progress가 null인 경우 NullPointerException가 발생하는 것이 흔한 일이었음
그래서
if (progress ≠ null) {
}
과 같이 null 체크를 해줘야했음.
public Progress getProgress() {
if (this.progress != null) {
throw new IllegalStateException();
}
return progress;
}
위와 같이 null 인 경우 에러를 throw 하기도 했었으나 좋은 사용 예는 아님
Java8에서 부터는 비어있는 값이 있을 경우 Optional을 이용해서 처리할 수 있음
public Optional<Progress> getProgresS() {
return Optional.ofNullable(progress);
}
- Optional은 여러 곳에서 사용할 수 있지만 return type으로 쓰는 것이 권장사항
- Collection, Map, Stream Array, Optional은 Optional로 감싸지 말 것 (컨테이너 성격의 instance 들은 Optional로 두 번 감싸는 것과 같음)
Optional.of(progress); // Null 값 비 허용 > NullPointerException
Optional.ofNullable(progress); // Null 값 허용
Optional.ifPresent
프리미티브 타입용 Optional은 따로 있음
- OptionalInt
- OptionalLong
- 등등
Optional 만들기
- Optional.of()
- Optional.ofNullable()
- Optional.empty()
Optional에 값이 있는지 없는지 확인하기
- isPresent()
- isEmpty() (Java 11~)
Optional에 있는 값 가져오기
- get()
- 만약에 비어있는 Optional에서 무언가를 꺼낸다면?
Optional에 값이 있는 경우에 그 값을 가지고 ~~를 하라
- ifPresent(Consumer)
- 예) Spring으로 시작하는 수업이 있으면 id를 출력하라
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 리턴하라
- orElse(T)
- 예) JPA로 시작하는 수업이 없다면 비어있는 수업을 리턴하라
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 하라
- orElseGet(Supplier)
- 예) JPA로 시작하는 수업이 없다면 새로 만들어서 리턴하라
Optional에 값이 있으면 가져오고 없는 경우 에러를 던져라
- orElseThrow()
Optional에 들어있는 값 걸러내기
- Optional filter (Predicate)
Optional에 들어있는 값 변환하기
- Optional map(Function)
- Optional flatMap(Function) : Optional 안에 들어있는 인스턴스가 Optional인 경우에 사용하면 편리함
728x90