Map 에서 put 에 null 값을 넣으면 어떻게 될까? 가령,
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> hashMap = new HashMap<>();
hashMap.put(null, "oh, my mistake");
System.out.println(hashMap.get(null));
}
}
oh, my mistake
정상적으로 출력되는것을 알 수 있다. (NullPointerException이 안난다.)
ConcurrentHashMap의 경우를 더 생각해보자.
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class Test {
public static void main(String[] args) {
Map<String, Object> con = new ConcurrentHashMap<>(100000);
con.put(null, "oh, my mistake");
System.out.println(con.get(null));
}
}
Exception in thread "main" java.lang.NullPointerException
이처럼 항상 나의 상식과 동작방식이 벗어날 수 있음을 알아야 한다.
이때는 항상 인터페이스를 확인하면서 edge 케이스에 대해서 고민을 하는 습관을 길러야한다.
자바의 Map의 인터페이스중 가장 중요한 get과 put에 대한 설명이다.
get을 보면 NullPointerException에서 optional 이라고 쓰여있는것을 알 수 있다.
따라서 해당 부분은 인터페이스가 그 구현체에게 해당 역할을 위임했다는 것을 알 수 있다.
(put도 마찬가지이다.)