>Java >java지도 시간 >Java에서 NullPointerException을 방지하는 팁

Java에서 NullPointerException을 방지하는 팁

DDD
DDD원래의
2025-01-03 00:04:38301검색

1. Java의 NullPointerException(NPE)이란 무엇입니까?

Tips to Avoid NullPointerException in Java

NullPointerException은 Java 프로그램이 초기화되지 않은 객체 참조(즉, null을 가리킴)를 사용하려고 할 때 발생합니다. 이는 null 개체에 대한 메서드 호출, null 개체의 필드 액세스 또는 수정, null이 아닌 인수를 기대하는 메서드에 null 개체 전달 등 다양한 시나리오에서 발생할 수 있습니다.

NullPointerException이 발생하는 일반적인 시나리오

NPE가 일반적으로 발생하는 위치를 이해하면 NPE를 사전에 방지하는 데 도움이 될 수 있습니다. 다음은 몇 가지 일반적인 시나리오입니다.

  • 초기화되지 않은 개체의 속성에 액세스를 시도합니다.
  • null을 반환할 수 있는 컬렉션(예: 목록, 지도) 사용
  • 라이브러리 또는 메서드에서 반환된 잠재적인 null 값을 처리하지 못했습니다.

2. NullPointerException을 방지하는 효과적인 기술

NullPointerException을 방지하는 것은 다른 무엇보다 좋은 프로그래밍 관행에 관한 것입니다. 몇 가지 효과적인 전략은 다음과 같습니다.

2.1 자바의 옵셔널 클래스 사용하기

Java 8에 도입된 Optional 클래스는 명시적으로 null을 사용하지 않고 선택적 값을 처리하도록 설계되었습니다. 이 접근 방식은 null이 아닌 값을 포함하거나 비어 있는 컨테이너를 제공하여 NullPointerException을 방지할 수 있습니다.

예:

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(n -> System.out.println(n.toUpperCase()));

getName()이 null을 반환하는 경우 NPE가 발생할 수 있는 getName().toUpperCase()를 직접 호출하는 대신 Optional.ifPresent()를 사용합니다. 값이 있는 경우에만 작업을 수행합니다.

2.2 Null 안전을 위해 주석 사용

Lombok과 같은 Java 라이브러리와 Spring과 같은 프레임워크는 @NonNull@Nullable과 같은 주석을 제공하여 컴파일 시간 검사를 제공하고 NPE를 방지합니다.

예:

public void printName(@NonNull String name) {
    System.out.println(name.toUpperCase());
}

여기서 nullprintName() 메서드에 전달되면 IDE 설정이나 빌드 구성에 따라 컴파일 시간 경고 또는 오류가 발생합니다.

2.3 Objects.requireNonNull()을 사용하여 Null 검사 구현

Objects.requireNonNull()은 지정된 객체가 null인 경우 사용자 정의 메시지와 함께 NullPointerException을 발생시키는 유틸리티 메서드입니다.

예:

String name = Objects.requireNonNull(getName(), "Name cannot be null");
System.out.println(name.toUpperCase());

이 코드는 getName()이 null을 반환하는 경우 사용자 정의 NullPointerException을 발생시켜 나중에 코드에서 예기치 않은 동작이 발생하는 것을 방지합니다.

3. 방어적인 프로그래밍 기법을 사용하세요

방어 프로그래밍에는 잠재적인 null 값을 예상하고 이를 적절하게 처리하는 코드 작성이 포함됩니다.

3.1 변수 즉시 초기화

변수를 선언할 때는 항상 초기화하세요. 이것이 방어 프로그래밍의 기본 원칙입니다.

예:

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(n -> System.out.println(n.toUpperCase()));

null 대신 빈 목록으로 이름을 초기화하면 목록의 모든 작업으로 인해 NPE가 발생하지 않습니다.

3.2 삼항 연산자 및 조건부 검사 사용

조건부 검사를 사용하면 명시적으로 예외를 발생시키지 않고 잠재적인 null 값을 처리할 수 있습니다.

예:

public void printName(@NonNull String name) {
    System.out.println(name.toUpperCase());
}

이 코드는 이름을 대문자로 변환하기 전에 null이 아닌지 확인하고 그렇지 않은 경우 안전한 대체 수단을 제공합니다.

4. 최신 Java 기능 활용

Java가 출시될 때마다 개발자가 더욱 안전하고, 깔끔하며, 강력한 코드를 작성하는 데 도움이 되는 새로운 기능이 도입됩니다.

4.1 컬렉션에서 Map.getOrDefault() 사용

Java 8에서는 맵에 키가 없는 상황을 처리하기 위해 Map.getOrDefault()를 도입하여 null 대신 기본값을 반환했습니다.

예:

String name = Objects.requireNonNull(getName(), "Name cannot be null");
System.out.println(name.toUpperCase());

여기서 "host" 키가 없으면 메서드는 null 대신 "localhost"를 반환합니다.

4.2 Null 안전 작업을 위해 스트림 API 및 필터 사용

Java 8의 Stream API를 사용하면 null 값에 대한 걱정 없이 안전한 데이터 처리가 가능합니다.

예:

List<String> names = new ArrayList<>(); // Instead of List<String> names = null;

이 코드는 목록에서 null 값을 필터링하여filteredNames에 대한 후속 작업이 null로부터 안전하도록 보장합니다.

5. 결론: 연습과 정확성이 문제를 예방한다

NullPointerException을 방지하는 것은 안정적인 Java 코드를 작성하는 데 필수적입니다. 선택적, 방어적 프로그래밍, 최신 Java 기능, Null 검사 등의 기술을 적용하면 애플리케이션에서 NPE 발생을 크게 줄일 수 있습니다.

Java에서 NullPointerException 처리에 대한 질문이나 팁이 있는 경우 아래에 자유롭게 의견을 남겨주세요. 함께 토론하고 배워봅시다!

에서 더 많은 게시물 읽기: Java에서 NullPointerException을 방지하는 팁

위 내용은 Java에서 NullPointerException을 방지하는 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.