1. ObjectUtils
- 주 용도:
- 객체와 관련된 여러 공통 작업을 수행합니다.
- 예를 들어, null인 경우 기본값 제공(defaultIfNull), 두 객체의 비교, 해시 코드 생성, toString 변환 등.
- 사용 상황:
- 단순한 null 체크 이상의 로직이 필요할 때.
- 예를 들어, "값이 null이면 기본값을 반환"하는 로직을 구현할 때 ObjectUtils.defaultIfNull(obj, defaultValue)를 사용할 수 있습니다.
- 라이브러리:
- Apache Commons Lang (또는 Spring에서도 유사한 ObjectUtils가 있음).
2. CollectionUtils
- 주 용도:
- Collection(리스트, 셋 등)과 관련된 작업을 수행합니다.
- 예를 들어, 컬렉션이 null이거나 비어있는지 검사(isEmpty, isNotEmpty), 합집합, 교집합 등의 집합 연산 등.
- 사용 상황:
- 컬렉션의 유효성(예: null 혹은 비어있음) 확인, 또는 컬렉션 간의 연산이 필요할 때.
- null 체크를 별도로 하지 않고, 한번에 "컬렉션이 null이거나 empty면 true"라고 판별할 수 있어 편리합니다.
- 라이브러리:
- Apache Commons Collections, Spring Framework의 CollectionUtils 등에서 제공.
3. java.util.Objects (예: Objects.nonNull, requireNonNull)
- 주 용도:
- JDK에서 제공하는 기본 유틸리티 클래스.
- Objects.nonNull(obj)는 boolean 값을 반환하여 null이 아님을 판별할 때 사용하거나, Stream의 필터로 활용.
- Objects.requireNonNull(obj)는 객체가 null이면 NullPointerException을 던져서 빠르게 문제를 확인할 수 있도록 해줍니다.
- 사용 상황:
- 간단한 null 체크가 필요할 때.
- 예를 들어, 메서드 인자가 null이면 예외를 발생시키고 싶을 때 Objects.requireNonNull(param, "param must not be null")를 사용할 수 있습니다.
- Stream 처리 시 filter(Objects::nonNull)과 같이 사용할 수 있습니다.
어떤 것을 선택할까?
- 단순 null 검사:
- JDK의 Objects.nonNull 또는 Objects.requireNonNull을 사용하는 것이 가볍고 직관적입니다.
- 기본값 반환 등 부가 기능 필요:
- Apache Commons Lang의 ObjectUtils.defaultIfNull() 같이 더 다양한 기능을 제공하는 메서드를 사용할 수 있습니다.
- 컬렉션의 유효성 검사:
- 컬렉션이 null이거나 empty인지 한 번에 검사할 때는 Spring이나 Apache Commons의 CollectionUtils.isEmpty(collection) 같은 메서드가 유용합니다.
- 기타:
- 문자열 처리는 Apache Commons Lang의 StringUtils를, 배열 처리는 ArrayUtils 등을 사용할 수 있습니다.
- 또, Guava의 Preconditions나 Apache Commons Validate 등도 유효성 검사에 많이 사용됩니다.
결국 어떤 도구를 쓸지는 상황에 따라 다릅니다.
- JDK 표준 메서드들은 별도의 라이브러리 의존성이 없고, 단순한 작업에는 충분합니다.
- 반면, 보다 복잡한 처리나 편의 기능이 필요하다면 Apache Commons나 Spring의 유틸리티 클래스를 사용하는 것이 좋습니다.
좋지 않은 코드 예)
1. null 이 아니고 비어있지 않은 경우를 체크하기 위해
if (TestList != null && TestList.size() > 0) { ... }
2. List 가 비어있는지 확인하기 위해
if (!TestList.isEmpty()) { ... }
좋은 코드 예)
null check 와 empty 를 동시에 확인하려면 CollectionUtils.isEmpty 와 같은 메서드를 사용하자!
//AS-IS
if (TestList == null || TestList.isEmpty()) { ... }
//TO-BE
if (CollectionUtils.isEmpty(TestList)) { ... }
시간 복잡도
- Objects.nonNull(obj):
단순히 obj != null을 검사하므로 O(1)입니다. - Objects.requireNonNull(obj):
null 체크 후, null이 아니면 그대로 반환하거나 null이면 예외를 던지므로 O(1)입니다. - ObjectUtils.defaultIfNull(obj, defaultValue):
obj가 null인지 검사하고, null이면 기본값을 반환하는 단순 연산이므로 O(1)입니다. - CollectionUtils.isEmpty(collection):
컬렉션이 null인지 또는 empty 인지를 검사합니다.
대부분의 Collection 구현체(예: ArrayList, HashSet 등)는 isEmpty()가 O(1)로 구현되어 있어 전체적으로 O(1)입니다. - List.size():
O(N)
'JAVA (SPRING)' 카테고리의 다른 글
[JAVA] Spring WebFlux 에서 FCM(FireBase Cloud Messaging) 보내기 (1) | 2025.04.17 |
---|---|
[JAVA] 카카오 알림톡 API 구현 (Ncloud 환경) (1) | 2025.04.15 |
[JAVA] LinkedHashSet (0) | 2025.03.05 |
IP-PBX 와 IP-Centrex 방식의 차이 (0) | 2025.02.18 |
OSI 7 Layer, TCP/IP 4Layer (0) | 2025.02.17 |