산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 8 Optional 마스터하기: 널-안전 코드를 위한 실용 가이드

Optional은 null이 아닌 객체를 담는 컨테이너 객체입니다. Optional 객체는 값이 없을 때 null을 표현하는 데 사용됩니다. 이 클래스는 값을 '사용 가능' 또는 '사용 불가'로 처리할 수 있는 다양한 유틸리티 메서드를 제공하여, 직접 null을 확인하는 대신 안전하게 다룰 수 있게 해줍니다. Java 8에 도입되었으며, Guava의 Optional과 유사합니다.

클래스 선언

다음은 java.util.Optional<T> 클래스의 선언입니다.

public final class Optional<T> extends Object

클래스 메서드

번호 메서드 및 설명
1

static <T> Optional<T> empty()

빈 Optional 인스턴스를 반환합니다.

2

boolean equals(Object obj)

다른 객체가 이 Optional과 "같은지" 여부를 나타냅니다.

3

Optional<T> filter(Predicate<? super T> predicate)

값이 존재하고 주어진 프레디케이트와 일치하면 해당 값을 설명하는 Optional을 반환하고, 그렇지 않으면 빈 Optional을 반환합니다.

4

<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)

값이 존재하면 제공된 Optional을 반환하는 매핑 함수를 적용하여 그 결과를 반환하고, 그렇지 않으면 빈 Optional을 반환합니다.

5

T get()

이 Optional에 값이 있으면 해당 값을 반환하고, 없으면 NoSuchElementException을 던집니다.

6

int hashCode()

값이 있으면 해당 값의 해시 코드를 반환하고, 없으면 0을 반환합니다.

7

void ifPresent(Consumer<? super T> consumer)

값이 존재하면 지정된 소비자(consumer)를 값과 함께 호출하고, 그렇지 않으면 아무 작업도 하지 않습니다.

8

boolean isPresent()

값이 있으면 true를 반환하고, 없으면 false를 반환합니다.

9

<U> Optional<U> map(Function<? super T, ? extends U> mapper)

값이 존재하면 제공된 매핑 함수를 적용하고, 결과가 null이 아니면 그 결과를 설명하는 Optional을 반환합니다.

10

static <T> Optional<T> of(T value)

지정된 null이 아닌 값이 존재하는 Optional을 반환합니다.

11

static <T> Optional<T> ofNullable(T value)

지정된 값이 null이 아니면 해당 값을 설명하는 Optional을 반환하고, null이면 빈 Optional을 반환합니다.

12

T orElse(T other)

값이 있으면 해당 값을 반환하고, 없으면 other를 반환합니다.

13

T orElseGet(Supplier<? extends T> other)

값이 있으면 해당 값을 반환하고, 없으면 other를 호출하여 그 결과를 반환합니다.

14

<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

값이 있으면 해당 값을 반환하고, 없으면 제공된 공급자(supplier)가 생성하는 예외를 던집니다.

15

String toString()

디버깅에 적합한 이 Optional의 비어 있지 않은 문자열 표현을 반환합니다.

이 클래스는 다음 클래스에서 메서드를 상속받습니다.

Optional 예제

원하는 편집기를 사용하여 다음 Java 프로그램을 작성하세요. (예: C:\> JAVA)

Java8Tester.java

Live Demo
import java.util.Optional;
public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8Tester = new Java8Tester();
        Integer value1 = null;
        Integer value2 = new Integer(10);
        // Optional.ofNullable - 전달된 매개변수가 null일 수 있음
        Optional<Integer> a = Optional.ofNullable(value1);
        // Optional.of - 전달된 매개변수가 null이면 NullPointerException 발생
        Optional<Integer> b = Optional.of(value2);
        System.out.println(java8Tester.sum(a, b));
    }
    public Integer sum(Optional<Integer> a, Optional<Integer> b) {
        // Optional.isPresent - 값이 존재하는지 확인
        System.out.println("첫 번째 매개변수 존재 여부: " + a.isPresent());
        System.out.println("두 번째 매개변수 존재 여부: " + b.isPresent());
        // Optional.orElse - 값이 있으면 반환, 없으면 기본값 반환
        Integer value1 = a.orElse(new Integer(0));
        // Optional.get - 값 가져오기, 값이 있어야 함
        Integer value2 = b.get();
        return value1 + value2;
    }
}

결과 확인

javac 컴파일러를 사용하여 클래스를 컴파일하세요.

C:\JAVA>javac Java8Tester.java

다음과 같이 Java8Tester를 실행하세요.

C:\JAVA>java Java8Tester

다음과 같은 출력이 나와야 합니다.

첫 번째 매개변수 존재 여부: false
두 번째 매개변수 존재 여부: true
10

java

  1. Java final 키워드 마스터: 변수, 메서드, 클래스에서의 활용
  2. Java instanceof 연산자 완벽 가이드: 기본 사용법부터 상속, 인터페이스까지
  3. Java 정적 중첩 클래스 이해: 용법, 내부 클래스와의 차이, 예제
  4. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  5. Java 싱글톤 패턴 완벽 가이드: 안전하게 구현하고 사용하기
  6. Java 리플렉션 마스터: 런타임에 클래스, 메서드, 필드 검사 및 조작
  7. Java ObjectOutputStream 마스터하기: 직렬화, 메서드, 실전 예제
  8. Java 제네릭 마스터하기: 재사용 가능하고 타입 안전한 코드 작성
  9. java.io로 Java 파일 작업 마스터하기 – 생성, 읽기, 쓰기 및 삭제
  10. Java 9 Optional 클래스 새로운 기능으로 기능 강화