실무코드 중 HashMap.get(키)
에서 nullPointerException이 발생할 때가 있고, 발생안할 때가 있는데 나는 무조건 키가 HashMap에 존재하지 않으면 발생한다고 생각했다.
그래서 nullPointerException 방어코드를 많이 작성했었따.
하지만 초기화를 하지 않았을 때에만 nullPointerException이 발생한다고 한다.
HashMap에서 get 메서드를 호출할 때 NullPointerException이 발생하는지 여부는 몇 가지 조건에 따라 다릅니다. 기본적으로, HashMap의 get 메서드는 지정된 키가 맵에 없는 경우 null을 반환하지만, 이는 NullPointerException을 발생시키지 않습니다. 다음은 세부 사항입니다:
HashMap<String, Object> map;
map.get("key"); // 이 경우 NullPointerException 발생
map 변수가 초기화되지 않은 상태에서 get 메서드를 호출하면 NullPointerException이 발생합니다.
HashMap<String, Object> map = new HashMap<>();
Object value = map.get("key"); // 이 경우 NullPointerException 발생하지 않음
이 경우, map이 정상적으로 초기화되어 있다면, get 메서드는 지정된 키가 맵에 없을 때 null을 반환하지만, NullPointerException은 발생하지 않습니다.
HashMap<String, Object> map = new HashMap<>();
Object value = map.get(null); // 이 경우 NullPointerException 발생하지 않음
HashMap은 null 키를 허용하므로, 키가 null일 경우에도 NullPointerException이 발생하지 않고, 해당 키에 매핑된 값이 없으면 null을 반환합니다.
따라서, map 변수가 초기화되어 있는 한, map.get("key") 호출 자체는 NullPointerException을 발생시키지 않습니다. 반환된 값이 null일 수 있지만, 이는 단순히 해당 키가 맵에 없음을 나타내는 것입니다.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 맵을 초기화
HashMap<String, Object> map = new HashMap<>();
// "key"에 해당하는 값 가져오기
Object value = map.get("key");
// 값이 null인지 확인
if (value == null) {
System.out.println("키에 해당하는 값이 없습니다.");
} else {
System.out.println("키에 해당하는 값: " + value);
}
}
}
이 코드는 "key"에 해당하는 값이 없을 때 null을 반환하며, NullPointerException은 발생하지 않습니다. map이 초기화되지 않은 경우에만 NullPointerException이 발생할 수 있으므로, 항상 맵을 초기화한 후에 get 메서드를 호출해야 합니다.
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> f1ResultMap =
mapper.readValue(String.valueOf(tempResult.getResultData()),HashMap.class);
String key_migration =
String.valueOf(f1ResultMap.get("key_migration")); //nullPointerException 발생
여기서 오류가 났었음
보통 실무 코드에서는 초기화(new 연산자 사용)
를 굉장히 잘해준다.
위 코드에서 tempResult.getResultData() 를 String
으로 바꾼다음 그걸 HashMap형태로 바꾸는 예제이다.
만약 String이 "" 이나 "null" 혹은 JSON형태의 문자열인데 비어있는 경우
에는 null로 반환된다.
하지만 그 외의 문자열이면서 HashMap형태로 위 String을 변환하는데에 실패한다면 그대로 null을 반환하는 것이 아니라 예외(JsonParseException, JsonMappingException, IOException
등)가 발생한다.
그래서 f1ResultMap 객체 자체가 null인데 거기서 f1ResultMap.get("key_migration") 을 하니까 nullPointerException이 발생했던 것
보통 객체 자체가 null인 경우가 많으니까
null 체크를 잘 하자