[java] 컬렉션 프레임워크의 null 값 처리
Java에서 컬렉션 프레임워크를 사용할 때, 때로는 null 값이 포함된 항목을 처리해야 할 때가 있습니다. 이 문제에 대해 어떻게 해결할 수 있는지 알아보겠습니다.
1. 컬렉션에 null 값 추가
ArrayList, LinkedList, HashSet 등의 컬렉션 클래스는 null 값을 허용합니다. 따라서 다음과 같이 null 값을 추가할 수 있습니다.
List<String> list = new ArrayList<>();
list.add(null);
HashSet의 경우에는 중복된 값을 허용하지 않기 때문에, null 값을 여러 번 추가해도 실제로는 하나의 null 값만 유지됩니다.
2. null 값 검사
null 값을 처리해야 하는 경우, 항상 null 값 검사를 해야 합니다. 컬렉션에 null 값이 있는지 확인하기 위해 다음과 같은 방법을 사용할 수 있습니다.
contains() 메소드
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add(null);
if (list.contains(null)) {
// null 값이 포함되어 있음
}
3. null 값 제거
null 값을 제거하려면, remove() 메소드를 사용할 수 있습니다.
remove() 메소드
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add(null);
list.remove(null); // null 값 제거
혹은, removeAll() 메소드를 사용하여 컬렉션에서 모든 null 값을 제거할 수도 있습니다.
removeAll() 메소드
List<String> list = new ArrayList<>();
list.add("apple");
list.add(null);
list.add("banana");
list.add(null);
list.removeAll(Collections.singleton(null)); // 모든 null 값 제거
4. null 값 대체
null 값 대신 다른 값을 사용하려면, replaceAll() 메소드를 사용할 수 있습니다.
replaceAll() 메소드
List<String> list = new ArrayList<>();
list.add("apple");
list.add(null);
list.add("banana");
list.add(null);
Collections.replaceAll(list, null, "orange"); // null 값을 "orange"로 대체
5. 주의사항
컬렉션 프레임워크에서 null 값을 다룰 때, 몇 가지 주의사항이 있습니다.
- TreeMap, TreeSet의 경우, null 값을 허용하지 않습니다.
- ConcurrentHashMap, ConcurrentSkipListMap의 경우, null 값을 허용하지 않습니다.
- Map 인터페이스의 key와 value에는 null 값을 사용할 수 있지만, 일부 메소드에서 null 값을 인식하지 않을 수도 있습니다.
따라서, null 값을 다루는 경우에는 컬렉션 타입과 해당 메소드의 동작을 확인하는 것이 중요합니다.