Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

J 의 기록

NPE(NullpointException) 에 대한 고찰 본문

개발

NPE(NullpointException) 에 대한 고찰

Luctor 2021. 4. 7. 14:46

오늘은 개발자들을 괴롭히는 Null 그리고 NullpointException에 대해 다뤄보고자 한다.

 

개발을 하게 되면 NullpointException(NPE) 에 마주치곤 한다.

 

보통 개발자의 부주의 (파라미터로 Null이 들어올거란 생각을 안한다던가..) 로 발생하는데 이에 대해 가져야할 습관들, 즉 NPE 예방에 대해 알아보자 

 

  • toString() 이 아닌 String.valueOf()를 사용하자
    toString()과 String.valueOf()의 차이는 NullpointException의 발생여부이다.
    Object가 null일 경우 String.valueOf(Object)를 사용할 경우 "null"이라는 String이 반환된다.
Map<String, Object> inputParamMap = ...

// inputParamMap.get("value") 가 null인 경우
String case1 = String.valueOf(inputParamMap.get("value"));	// "null"을 반환
String case2 = inputParamMap.get("value").toString();		// NullPointException 발생
 
// String.valueOf()의 null 체크
if("null".equals(case1)) {
	...
}

// 참고
// equals함수는 왼쪽에 있는 것을 기준으로 비교하기 때문에 변수보다는 문자열을 왼쪽에 두는 것이 좋다.
String str = null;
 
/* Exception 발생 */
if(!str.equals("")) {
	...
}

/* 정상 */
if(!"".equals(str)) {
	...
} 
  • 함수에서 null을 리턴하지 말것. 
    함수에서 null을 리턴해야 하는 경우 빈 Collection객체를 반환하자.
  • null에 안전한 java 내장 함수를 사용하자

 

§ 주의 ) Java 의 getOrDefault() 함수 

 

java의 getOrDefault() 함수는 Map에 해당 키가 존재하지 않을 경우 default값을 반환한다.

즉, key가 있는데 그 key의 값이 null이 아님을 보장해주진 않는다!