Post

03 Optional Check

03 Optional Check

1. Note

  • “이 메소드는 값을 반환할 수도 있고, 없을 수도 있다”라는 표현
  • 내부에서 JPA save
    • 역할 자체가 무너지는 상황이 생김
    • 옵셔널이 값의 유무를 확인하는데,
    • 값자기 레파지토리 저장을 하는건 안맞음
  • Optional 내부에서는 “값 존재 여부 판단과 변환까지만” 하고,
    • JPA save 같은 상태 변경은 서비스 계층에서 처리하는 게 가장 안전한 구조

2. 값 생성

메소드설명특징
Optional.of(T value)null이 아닌 값으로 Optional 생성null이면 NPE 발생
Optional.ofNullable(T value)null 허용 생성가장 많이 사용
Optional.empty()빈 Optional 생성값 없음 표현

3. 값 유무 확인

메소드설명반환
isPresent()값이 있으면 trueboolean
isEmpty()값이 없으면 trueboolean (Java 11+)

3. 값 꺼내기

메소드설명특징
get()값 반환값 없으면 예외 (위험)
orElse(T other)값 없으면 기본값 반환항상 평가됨
orElseGet(Supplier)값 없으면 Supplier 실행lazy 실행 (권장)
orElseThrow()값 없으면 예외 발생기본 NoSuchElementException
orElseThrow(Supplier)커스텀 예외실무에서 많이 사용

4. 조건처리

메소드설명
ifPresent(Consumer)값 있으면 실행
ifPresentOrElse(Consumer, Runnable)값 있으면 A, 없으면 B (Java 9+)

5. 변환&가공

메소드설명특징
map(Function)값 변환null이면 그대로 empty
flatMap(Function)중첩 Optional 제거Optional<Optional> 방지
filter(Predicate)조건 만족 시 유지아니면 empty

6. 기타

메소드설명
stream()Optional → Stream 변환 (Java 9+)
or(Supplier)값 없으면 대체 Optional 제공
This post is licensed under CC BY 4.0 by the author.