java.lang.NullPointerException(NPE)을 눈치채셨나요? Java에서 런타임 NPE를 피하기 위한 8가지 모범 사례

게시 됨: 2020-10-07
java.lang.NullPointerException(NPE)을 눈치채셨나요? Java에서 런타임 NPE를 피하기 위한 8가지 모범 사례

Java 및 Java에서 Null 포인터 예외 방지 Java에서 NullPointerException을 방지하기 위한 팁 및 모범 사례.

Java 개발자로서 첫날부터 NPE(Null Pointer Exception)에 직면했을 것입니다. 대부분의 경우 NPE 예외는 동일한 근본 원인을 핀으로 가리키는 명확한 스택 추적을 보여주지만 수백 개의 클래스가 있는 대규모 엔터프라이즈 수준 응용 프로그램의 경우 실제 근본 원인을 찾는 것은 악몽이 됩니다.

NPE(널 포인터 예외)란 무엇입니까?

NullPointerException (NPE) 은 개체를 참조하는 것처럼 메모리(null)의 아무 위치도 가리키지 않는 참조를 사용하려고 할 때 발생하는 예외입니다.

null 참조에서 메서드를 호출하거나 null 참조 필드에 액세스하려고 하면 NPE가 트리거됩니다. 이것이 가장 흔한 원인입니다.

JavaDoc에 따르면 NPE의 주요 원인은 다음과 같습니다.

  • Throwable 값인 것처럼 null 을 throw합니다.
  • null 개체의 인스턴스 메서드를 호출합니다.
  • null 개체의 필드에 액세스하거나 수정합니다.
  • 배열인 것처럼 null 의 길이를 취합니다.
  • 배열인 것처럼 null 슬롯에 액세스하거나 수정합니다.

이제 진짜 질문은 런타임에 java.lang.NullPointerException을 피하는 방법입니다. 이 튜토리얼에서는 런타임에 NPE를 생성하는 몇 가지 예제와 이를 해결하기 위해 수행해야 하는 단계를 살펴보겠습니다.

런타임 1일에 NPE를 생성해 봅시다. 아래의 CrunchifyNullPointerExceptionTips.java 예를 살펴보십시오.

우리는 NPE를 3가지 다른 방법으로 만들 것입니다

  1. null 개체에 액세스하려고 하면 NPE가 발생합니다.
  2. null 문자열을 변환하려고 하면 NPE가 발생합니다.
  3. 클래스 초기화 중에 null 개체에 액세스하려고 하면 NPE가 throw됩니다.

클래스 CrunchifyNullPointerExceptionTips.java 만들기

결과:

글쎄, 런타임에 NullPointerException을 피하기 위해 사용할 수 있는 몇 가지 팁과 트릭이 있습니다. 한 번 보자.

힌트 1:

Eclipse / IntelliJ IDE는 작업 공간에 NPE를 표시하려고 합니다. 개발 중에만 코드를 수정하십시오.

Eclipse의 널 포인터 힌트

힌트 2:

개체에 대한 작업 전에 crunchifyI sNullorEmpty () 검사를 추가합니다. 이것을 CrunchifyNullPointerExceptionTips.java 에 추가하십시오.

위의 자바 프로그램 라인 55와 56은 이것으로 대체될 것입니다.

힌트 3:

trim() 작업 후 null 이 비어 있는지 확인하십시오.

힌트 4:

중단 없는 런타임 프로세스를 방지하려면 항상 Try Catch block 을 사용하십시오.

힌트 5:

Collections.emptyList() 는 더 나은 제네릭 처리로 인해 선호됩니다.

힌트 6:

Java Assertions 사용

어설션은 코드에 대한 가정을 테스트할 수 있는 문입니다. 예를 들어 시스템에서 이름을 반환하는 메서드를 작성하는 경우 String이 null인 경우 otherName을 반환한다고 주장할 수 있습니다.

어설션의 기본 사용법은 다음과 같습니다.

하지만 문제가 있습니다. Assertion은 프로덕션 환경에서 사용할 수 없으며 비즈니스 로직과 함께 Assertion을 사용해서는 안 됩니다.

힌트 7:

containsKey() , containsValue() , contains() 검사를 사용해보십시오.

힌트 8:

결론적으로 런타임에 프로덕션에서 디버깅하는 것보다 개발하는 동안 NPE를 처리하는 것이 항상 좋은 습관입니다. Spring Framework Annotation, Factory Pattern , Null Object Pattern 등을 사용하여 사용할 수 있는 다른 팁과 트릭이 많이 있습니다. 하지만 지금은 이만 줄이겠습니다.

아마 일주일 안에 이것에 대한 새로운 튜토리얼을 게시할 것입니다. 계속 지켜봐 주세요.

이 튜토리얼에 추가하고 싶은 것이 있거나 문제를 발견한 경우, 차임벨을 들고 의견을 제공하십시오.