728x90
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
반응형
'Java' 카테고리의 다른 글
[Java] JSON 변환 라이브러리 Jackson에 대해 (0) | 2022.11.22 |
---|---|
[Java] 예외처리 (0) | 2022.09.22 |
[Java] 빌더 패턴(Builder Pattern)에 대해 (0) | 2022.08.30 |
[Java] Ubuntu에 AdoptOpenJDK 설치 (0) | 2022.08.10 |
Java로 간단한 콘솔 연락처 프로그래밍 (0) | 2021.07.09 |