JAVA · 기초 문법
Optional 심화
Optional의 다양한 메서드와 올바른 사용 패턴을 알아봅니다.
기초 문법중급OptionalmapflatMaporElseGet
핵심 설명
Optional의 다양한 메서드와 올바른 사용 패턴을 알아봅니다.
Java code
import java.util.Optional;
public class OptionalAdvanced {
record User(String name, String email) {}
static Optional<User> findUser(String name) {
if ("홍길동".equals(name)) {
return Optional.of(new User("홍길동", "hong@test.com"));
}
return Optional.empty();
}
public static void main(String[] args) {
// 기본 사용
Optional<User> user = findUser("홍길동");
// orElse vs orElseGet
User u1 = user.orElse(new User("기본", "none"));
User u2 = user.orElseGet(() -> new User("기본", "none"));
// map으로 변환
String email = findUser("홍길동")
.map(User::email)
.orElse("없음");
// flatMap — Optional 반환 메서드 체이닝
// filter — 조건 필터링
String result = findUser("홍길동")
.filter(u -> u.email().contains("@"))
.map(User::email)
.orElse("유효하지 않음");
// or (Java 9+) — 대안 Optional 제공
User found = findUser("없는사람")
.or(() -> findUser("홍길동"))
.orElseThrow();
// ifPresentOrElse (Java 9+)
findUser("없는사람").ifPresentOrElse(
u -> System.out.println("찾음: " + u.name()),
() -> System.out.println("사용자 없음")
);
}
}학습 팁
orElse()는 값이 있어도 인자를 평가합니다. 생성 비용이 크면 orElseGet()을 사용하세요.
주의할 점
Optional을 필드, 파라미터, 컬렉션 원소로 사용하지 마세요. 반환 타입으로만 사용하는 것이 올바른 패턴입니다.
자주 묻는 질문
Optional 심화란 무엇인가요?
Optional 의 다양한 메서드와 올바른 사용 패턴을 알아봅니다.
Optional 심화 학습 시 주의할 점은 무엇인가요?
Optional 을 필드, 파라미터, 컬렉션 원소로 사용하지 마세요. 반환 타입으로만 사용하는 것이 올바른 패턴입니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.