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용량이 커질 수 있어 굳이 이렇게까지 해야하나 싶다.