반응형
빈값의 상황을 알리기 위해 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 대신에 빈 배열이나 빈 컬렉션을 반환하라.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 41 오버로딩할 때는 주의하라 (0) | 2023.04.26 |
---|---|
<Effective Java> RULE 42 var args는 신중히 사용하라 (0) | 2023.04.26 |
<Effective Java> RULE 44 모든 API요소에 문서화 주석을 달라 (0) | 2023.04.26 |
<Effective Java> RULE 45 지역 변수의 유효범위를 최소화하라 (0) | 2023.04.26 |
<Effective Java> RULE 46 for문 보다 for-each문을 사용하라 (0) | 2023.04.26 |