본문 바로가기
JAVA

JAVA: switch - null 값 처리 [코딩백과 with JAVA]

by GangDev 2024. 12. 22.

널 값 처리 향상

Java SE 17부터 스위치 표현식에서 널 값 처리가 향상되었습니다. 이 새로운 기능을 통해 널 값을 직접 처리할 수 있어 코드의 안정성과 가독성이 크게 향상됩니다.

널 값 처리의 중요성

  1. 프로그램 안정성: 널 포인터 예외를 방지하여 프로그램의 안정성을 높입니다.
  2. 예외 처리: 예상치 못한 널 값에 대한 대비책을 마련할 수 있습니다.
  3. 코드 간결성: 널 체크를 스위치 표현식 내에서 직접 수행할 수 있어 코드가 더 간결해집니다.

기본적인 널 체크 예시

String input = null; // 또는 사용자 입력 등으로 설정

String result = switch (input) {
    case null -> "널 값입니다.";
    case "" -> "빈 문자열입니다.";
    default -> "값: " + input.length();
};

System.out.println(result);

이 예제에서:

  • case null을 사용하여 널 값을 직접 처리합니다.
  • 빈 문자열("")도 별도로 처리합니다.
  • default 케이스로 널이 아니고 빈 문자열이 아닌 모든 경우를 다룹니다.

복합 조건에서의 널 처리

복잡한 조건에서 널 처리가 필요한 경우:

Object obj = null; // 또는 실제 객체

String type = switch (obj) {
    case null -> "널 객체";
    case Integer i -> "정수: " + i;
    case String s when s.length() > 5 -> "긴 문자열: " + s.substring(0, 5) + "...";
    default -> "기타 객체";
};

System.out.println(type);

이 예제에서:

  • null 체크 후 다양한 타입의 객체를 처리합니다.
  • when 절을 사용하여 문자열 길이에 따른 추가적인 조건을 지정합니다.

옵셔널 클래스와의 통합

Optional 클래스와 함께 사용하면 더 안전한 널 처리가 가능합니다:

import java.util.Optional;

Optional<String> optionalValue = Optional.empty(); // 또는 Optional.of("값")

String processedValue = switch (optionalValue) {
    case Optional.empty() -> "값이 비어있습니다.";
    case var nonEmpty when nonEmpty.isPresent() -> "값: " + nonEmpty.get();
    default -> "예상치 못한 상황";
};

System.out.println(processedValue);

이 예제에서:

  • Optional.empty()를 사용하여 빈 옵셔널을 확인합니다.
  • 패턴 매칭을 사용하여 비어있지 않은 옵셔널의 값을 안전하게 추출합니다.

장점

  1. 안전성: 널 값에 대한 명시적인 처리로 NullPointerException을 방지합니다.
  2. 가독성: 널 체크 로직을 스위치 표현식 내에서 명확히 표현할 수 있습니다.
  3. 유연성: 다양한 유형의 객체나 값에 대해 널 처리를 적용할 수 있습니다.
  4. 간결성: 별도의 널 체크 로직 없이 스위치 표현식 내에서 직접 처리할 수 있습니다.

주의사항

  • 이 기능은 Java SE 17부터 사용 가능하며, 이전 버전에서는 널 값으로 인한 NullPointerException이 발생할 수 있습니다.
  • 복잡한 널 체크 로직의 경우, 별도의 메서드로 분리하는 것이 코드 가독성을 높이는 데 도움이 될 수 있습니다.

편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111