Java

[Java] Null Check

범데이 2022. 11. 25. 08:52

1. 개요

우리가 자바로 프로그램을 개발하다보면 가장 쉽게 마주할 수 있는 오류는 NullPointerException(java.lang.NullPointerException)일 것이다.

이는 보통 객체 값이 null이거나 초기화가 안되어 있는 인스턴스를 사용할때 발생하게 된다.

  • Null 객체에서 method를 호출하는 경우
  • Null 객체의 필드에 접근하거나 값을 변경하는 경우
  • Null 의 길이를 배열처럼 취하는 경우
  • Null을 throw하는 경우
  • Null을 통해 동기화 할 경우
public class Sample {
  public static void main(String[] args){
    Foo foo = null;
    foo.toString(); // NullPointerException
    foo.equals(""); // NullPointerException
    foo.length(); // NullPointerException
    foo.name; // NullPointerException
  }
}

이러한 오류를 피가히 위해 항상 Null 체크가 필요하다.

 

 

2. Null Check 예제

- 기본적인 Null Check

if(value != null) {
	// do something(value)
}

Null이면 do something 코드를 실행하지 않게 하여 오류를 방지한다.

 

 

- String의 Null Check 예제

String value = "";
// value에 값을 넣고..
if(value.equals("")){
  // do something
}

String값을 빈 값으로 초기화 한 뒤 할당할 값을 할당하고,

후에 빈 값인지 비교하여 잘 할당되었는지 체크할 수 있다.

(주의할점: String이 빈값인 것이 정상일 경우엔 당연히 위의 방법을 사용하면 안된다.)

 

import org.stringframework.util.StringUtils;

if(StringUtils.hasText(value)) {
  // do something
}

---
import org.apache.common.lang3.StringUtils

if(StringUtils.isNotBlank(value)) {
  // do something
}

위와 같이 StringUtils와 같은 라이브러리를 이용하여 String 값의 Null Check를 할 수 있다.

 

 

- List형 Null Check 예제

if(listValue != null && listValue.size() > 0) {
  // do something
}

객체 자체가 널인지 체크하고 사이즈도 체크한다.

 

 

- Custom Method를 만들어 Null Check 예제

public static boolean isEmpty(Object obj) {
  if(obj == null) { return true; }
  if((obj instanceof String) && (((String)obj).trim().length() == 0)) { return true; }
  if(obj instanceof Map) { return ((Map<?, ?>)s).isEmpty(); }
  if(obj instanceof List) { return ((List<?>)obj).isEmpty(); }
  if(obj instanceof Object[]) { return (((Object[])obj).length == 0); }

  return false;
}

isEmpty라는 메서드를 만들어서 Null Check할 값을 인자로 준 뒤,

해당 값의 타입 체크를 통해 Null인지 검사를 한다.

 

사용법은 아래와 같다.

if(!isEmpty(yourValue)){
  // do something
}

Null이면 true를 반환하기 때문에 Null Check를 위해선 조건문 앞에 부정 연산자("!") 를 붙이는 걸 잊지 말아야 한다.

 

 


#References

https://jhyonhyon.tistory.com/2

https://sorjfkrh5078.tistory.com/94

https://enzycut.tistory.com/entry/JAVA-null-체크

반응형