IT/Programming / / 2023. 4. 26. 13:40

<Effective Java> RULE 43 null 대신 빈 배열이나 컬렉션을 반환하라

반응형

 

빈값의 상황을 알리기 위해 null을 반환하는 예시

 /**
 * 
 * 재고가 남는 모든 치즈를 반환. 치즈가 남지 않았을 때는 null을 반환
 * 
 * @author    ismyeong
 * @writeday  2018. 3. 15.
 *
 */
private final List<Cheese> cheeseInStock = new ArrayList<Cheese>();

private List<Cheese> getCheeses() {
    if(cheeseInStock.size() == 0) {
        return null;
    }
    return cheeseInStock;
}
 

null의 상황을 처리하기 위한 코드

if(cheeses != null &&
        Arrays.asList(cheeses).contains(Cheese.STILTON)) {
    System.out.println("매우 맛있음");
}
 

null이 반환되지 않는다면 사용할 수 있는 코드

if(Arrays.asList(shop.getCheeses()).contains(Cheese.STILTON)){
      System.out.println("매우 맛있음");
}
 

! null처리를 잊어 버릴 수 있다 !

 

배열 할당 비용이 드는 것 보다 null값 반환이 더 나은 방법인가?

· 프로파일링 결과로 해당 메서드가 성능 저하의 주범이라는 것은 신빙성이 없다.(규칙 55)

· 길이가 0인 배열은 변경 불가능하므로 아무제약 없이 재사용할 수 있다.(규칙 15)

 

 

toArray함수는 반환되는 원소가 담길 배열을 스스로 할당하며 컬렉션이 비어있을 경우 인자로 주어진 빈 배열을 사용한다.

따라서 컬렉션에 값이 있을 경우 빈값이 할당되지 않는다.

//컬렉션에서 배열을 만들어 반환하는 올바른 방법
private final List<Cheese> cheesesInStock = null;

private static final Cheese[] EMPTY_CHEESE_ARRAY = new Cheese[0];

/**
 * 재고가 남는 모든 치즈 목록을 배열로 만들어 반환
 */
public Cheese[] getCheeses() {
    return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
}
 

결론

· null 대신에 빈 배열이나 빈 컬렉션을 반환하라.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유