null check
CollectionUtils.isEmpty()
public abstract class CollectionUtils {
public CollectionUtils() {
}
public static boolean isEmpty(Collection<?> collection) {
return collection == null || collection.isEmpty();
}
...
}
내부적으로 isEmpty
를 사용 중인데, null check도 같이 하고잇다.
그 말인 즉슨 isEmpty는 null safe 하지 않다는 뜻?
List.isEmpty()
abstract collection 의 구현체
public boolean isEmpty() {
return size() == 0;
}
nullsafe 하지 않다
스트링이나 컬렉션의 null을 체크할때는, utils를 활용해보자.
이것도 common 의 utils가 있고, spring의 utils가 있는데
common 은 isNotEmpty를 지원한다./** * Null-safe check if the specified collection is not empty. * <p> * Null returns false. * * @param coll the collection to check, may be null * @return true if non-null and non-empty * @since Commons Collections 3.2 */ public static boolean isNotEmpty(Collection coll) { return !CollectionUtils.isEmpty(coll); }
implement class 대신 Interface 로 받기
구현체의 메서드를 사용할 필요가 없다면, HashMap이나 ArrayList 대신 Map, List 등의 Collection은 인터페이스로 받자.
다른 타입의 구현체로 변경했을 때 공수를 줄여줄 것이다.
Why define a Java object using interface rather than implementation
getter
사용 시 주의게터를 쓰는 로직이 있다면 Assert.notNull
혹은 filter(Object::notnull)
등을 이용해 먼저 nullcheck를 해두자
추후 .toString 등의 코드가 추가됐을 때 NPE가 발생하는 것을 막을 수 있다.
logging 알뜰살뜰 활용하기
log.debug("API >>>>" + api + " request >>>>" + request) ....
System.println.out 을 쓰면 안되는 것은 인제 모두들 알죵
그런데 Sl4j 등을 사용해 로그를 찍는다 한들, 위와 같이 문자열 연산을 하면 쪼오금 아쉽다.
일반적으로 가용 로그레벨 체크 > .debug 가 가용하다면 로그 출력
이 되어야하지만, 위같은 경우는 로그레벨 체크 이전에 스트링 연산이 먼저 일어나 불필요한 작업을 수행할 수도 있다.