PHpullh

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 을 필드, 파라미터, 컬렉션 원소로 사용하지 마세요. 반환 타입으로만 사용하는 것이 올바른 패턴입니다.