algorithm/java

null pointer exception 예방하기

아르르르를를르 2021. 7. 11. 21:26

java.lang.NullPointerException (NPE)

 

발생원인:

Runtime Exception으로 java말고도 대부분 개발언어에서 자주 발생한다.

null 객체를 참조하였을 때 발생한다. 해당 주소를 찾아갔을 때 아무것도 없다는 의미이다.

 

방어코드:

1) return null 지양하기

null이 "데이터 없음"을 의미할 수 도 있지만 "failure"를 의미하는 경우도 있어 모호하므로 버그가 많이 발생하게 된다. 되도록이면 return null 은 사용하지 않기로 한다.

 

2) parameter로 null 넘기지 말기

1번과 같은 의미로 어떤 특별한 의미가 없다면 굳이 주지도 받지도 말자.

 

3) null check 하기

TestObject test = new TestObject();
String a = a.getSomething();
if(a != null){
	// your code
}

 

4) String.equals() 시 비교할 문자열에 붙이기

if("Object".equals(TestClass.getNullString())){
	System.out.println("same string");
}

 

5) toString() 보다 String.valueOf() 사용하기

String a = "";
// NullPointException 발생
System.out.printf("a = %s", aClass.getNullString().toString());
// 변경 후
System.out.printf("a = %s", String.valueOf(aClass.getNullString()));

 

6) try catch 구문 사용

try{
	String a = TestClass.getNullString().toString();
} catch (NullPointerException e){
	e.printStackTree();
}

 

7) File, Array, JDBC 등 데이터를 받아오는 로직 개발 시 데이터가 없는 경우도 가정하고 개발하기

 

8) chaining 메소드 호출 자제하기

String city = getPerson(id).getAddress().getCity();

중간에서 return 받은 값이 null인 경우 NPE가 발생하며 Stack Trace에서도 해당 line 위치만 출력되기에 어디서 에러가 발생했는지 디버깅하기도 어렵다.

 

9) DB 테이블 컬럼 생성시 default값 설정하기

이는 DB용량이 커질 수 있어 굳이 이렇게까지 해야하나 싶다.

 

 

참고: https://w00ks.tistory.com/entry/NullPointerException%EC%9D%84-%EC%98%88%EB%B0%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95