[220708] Java 회고

archymi·2022년 7월 9일
1
post-thumbnail

Java Map 에 관하여

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도 마찬가지이다.)

오늘의 교훈 : 돌다리도 두드려보고 건너고 한번씩 인터페이스를 확인하자.

0개의 댓글