본문 바로가기
Language & Library/JAVA

[JAVA] null 체크, Null Pointer Exception(널 포인터 익셉션) 처리

by 댓츠굿 2014. 3. 8.

null 체크, NPE, Null Pointer Exception(널 포인터 익셉션)을 처리하는 방법

 

1. Optional.ofNullable 사용 ( Java8 )

null 체크 할 때, 아래와 같이 삼항연산을 이용하여 null 처리를 할 때가 있습니다. 그러나 자바8에서 Optional의 ofNullable을 사용하여 null 여부를 판단하여 처리할 수 있습니다. 이 때, 만약 String 값이 null 이면 NPE를 내지 않고 대신에 -1을 리턴할 수 있습니다.

 

  // 삼항연산을 이용하여 null 처리
  int intVal = (str == null) ? -1 : Integer.parseInt(str);
   
  // 자바8에서 Optional의 ofNullable을 사용하여 null 처리
  String strVal = null;
int
value = Optional.ofNullable(strVal).map(Integer::valueOf).orElse(-1);
   
  // String 값이 null이면, NPE를 내지 않고 대신에 -1을 리턴
   
 

 

2. Stream에서는 Objects Methods를 사용하여 null 체크

Objects.isNull 및 Objects.nonNull이 일반적인 null 검사에 가장 적합한 것은 아니지만, Stream과 함께 사용할 때 적합합니다.

myStream.filter(Objects::nonNull)
myStream.anyMatch(Objects::isNull)

 

 

3. null 효과적으로 처리하기

if (Optional.ofNullable(myVariable).isPresent()) // bad

if (Objects.nonNull(myVariable)) // better, but still bad

if (myVariable != null) // good

 

1. null 체크하는 과정이 복잡하여 bad.
2. null을 인수로 전달하여 still bad. null을 인자값으로 넘기는 일이 없도록 하여 NPE가 발생하지 않도록 합니다.
3. 단일 조건 처리하여 good!

 

 

 

4. "비교문자". equals( val ) 사용

만약 val 이라는 변수에 null 값이 들어있다면, val.equals("비교문자") 사용 시 NPE가 발생합니다.

때문에 "비교문자".equals( val ) 형태로 사용하기를 권합니다.

 

 

 

5. if( val == null || val.length() == 0 ) 사용

만약 변수에 값이 없거나 null일 경우를 처리하고 싶을 때 아래와 같이 처리합니다.

 if (param == null || param.length() == 0) {
     // 값이 없거나 null일 경우 처리
 } else { 
     // 값이 있는 경우 처리
 }

cf.) 값이 들어있는지 확인할 때 length()로 비교하는 것도 추천합니다.

 

 

 

6. null을 인자값(Argument)으로 넘기지 않습니다.

null을 인자값으로 넘기는 일이 없도록 하여 NPE가 발생하지 않도록 합니다.

 

 

 

7. java.util.Objects.requireNonNull 메소드 사용 ( Java7 )

매개변수의 null을 체크하며 null이 아닐경우 그대로 반환하고, null일 경우 NPE를 발생시킵니다.
 
public void foo(String val) {
     String bar = Objects.requireNonNull(val);
}

 

 

반응형