본문 바로가기
JAVA

Java Optional 간단 정리

by 얍얍1234 2023. 9. 18.

자바 개발에서 가장 흔한 오류 중 하나는 널 포인터 예외(NullPointerException)입니다. 널 값을 다룰 때 발생하는 이 문제를 해결하기 위해 Java 8부터 도입된 Optional 클래스가 있습니다. 이 글에서는 Java Optional의 개념, 사용법, 그리고 실제 상황에서의 활용에 대해 간단히 알아보겠습니다.

 

JAVA Optional

 

1. Optional이란?

Optional은 Java 8에서 도입된 클래스로, 널 (null) 값을 다루는데 도움을 주는 컨테이너 클래스입니다. Optional은 값이 있을 수도 있고 없을 수도 있는 값을 나타내며, 이를 통해 널 포인터 예외를 방지하고 안전하게 널 값을 처리할 수 있게 합니다.

 

2. Optional의 생성

Optional 객체를 생성하는 방법은 다양합니다. 주로 사용되는 방법은 다음과 같습니다.

 

2.1. Optional.of(value)

값이 null이 아닌 경우에 사용합니다. 만약 값이 null이면 NullPointerException이 발생합니다.

String value = "Hello, Optional!";
Optional<String> optional = Optional.of(value);

 

2.2. Optional.ofNullable(value)

값이 null인 경우에도 사용할 수 있습니다. 값이 null이면 빈 Optional을 생성합니다.

String value = null;
Optional<String> optional = Optional.ofNullable(value);

 

2.3. Optional.empty()

빈 Optional을 생성합니다. 이 경우, 값이 없는 상태를 나타냅니다.

Optional<String> emptyOptional = Optional.empty();

 

3. Optional의 사용


3.1. 값의 존재 여부 확인

Optional을 사용하여 값의 존재 여부를 확인할 수 있습니다.

Optional<String> optional = // Optional 객체 생성
if (optional.isPresent()) {
    // 값이 존재하는 경우
    String value = optional.get();
    System.out.println("Value: " + value);
} else {
    // 값이 없는 경우
    System.out.println("Value is not present.");
}

 

 

3.2. 값의 추출

Optional 객체에서 값을 추출할 때는 get() 메서드를 사용합니다. 그러나 이 메서드를 호출하기 전에 값의 존재 여부를 반드시 확인해야 합니다.

Optional<String> optional = // Optional 객체 생성
if (optional.isPresent()) {
    String value = optional.get();
    System.out.println("Value: " + value);
} else {
    System.out.println("Value is not present.");
}

 

3.3. 값의 기본값 설정

값이 없는 경우 기본값을 설정하고 싶을 때는 orElse(defaultValue) 메서드를 사용합니다.

Optional<String> optional = // Optional 객체 생성
String value = optional.orElse("Default Value");
System.out.println("Value: " + value);

 

3.4. 값의 존재 시 처리

값이 존재하는 경우에만 처리를 수행하고자 할 때는 ifPresent(consumer) 메서드를 사용합니다.

Optional<String> optional = // Optional 객체 생성
optional.ifPresent(value -> {
    System.out.println("Value is present: " + value);
});

 

 

4. 예제: Optional의 실제 활용


4.1. 데이터베이스 조회 결과 처리


데이터베이스에서 특정 값을 조회할 때, 그 값이 존재하지 않을 수 있습니다. 이때 Optional을 사용하면 간편하게 처리할 수 있습니다.

public Optional<User> findUserById(long id) {
    // 데이터베이스 조회
    User user = userRepository.findById(id);
    return Optional.ofNullable(user);
}

 

 

4.2. 연쇄적인 Optional 사용


Optional은 연쇄적으로 사용할 수 있어, 여러 단계의 연산을 수행할 때 유용합니다.

Optional<Order> order = getOrderById(orderId);
String email = order.flatMap(Order::getUser)
                    .map(User::getEmail)
                    .orElse("Unknown Email");


5. Optional의 주의사항

5.1. 성능

Optional을 남용하면 성능 문제가 발생할 수 있으므로, 반드시 필요한 경우에만 사용해야 합니다.


5.2. 중첩된 Optional

Optional 안에 또 다른 Optional을 사용하는 것은 지양해야 합니다. 이로 인해 코드의 가독성이 떨어질 수 있습니다.


6. 결론


Java Optional은 널 포인터 예외와 같은 오류를 방지하고 안전하게 널 값을 처리하는 데 큰 도움을 줍니다. 옵셔널은 자바 8부터 도입되었으며, 이를 적절히 활용하면 더 안전하고 가독성 높은 코드를 작성할 수 있습니다. 그러나 남용하지 않고 필요한 경우에만 사용해야 하며, 중첩된 옵셔널을 피하고 성능에 주의해야 합니다. Java Optional은 자바 프로그래밍에서 널 값 처리의 혁신적인 도구 중 하나로 자리잡았으며, 앞으로도 자바 개발자들에게 큰 도움이 될 것입니다.

'JAVA' 카테고리의 다른 글

Java 멀티 쓰레드 간단히 알아보자  (2) 2023.09.24
Java Collection 간단 정리  (0) 2023.09.19
Java Spring 에 대해 알아보자  (0) 2023.09.18
Java Stream 에 대해 알아보자  (0) 2023.09.13
JAVA SOLID 원칙에 대해 알아보자  (0) 2023.09.12