JavaRush /Java Blog /Random-KO /null이 아닌 길이가 0인 배열을 반환합니다.
alexnjc
레벨 31

null이 아닌 길이가 0인 배열을 반환합니다.

Random-KO 그룹에 게시되었습니다
종종 다음과 같은 방법이 있습니다.
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
판매되는 치즈가 없는 상황을 특별한 경우로 취급할 이유가 없습니다. 이를 위해서는 클라이언트가 메소드의 반환 값을 처리하기 위한 추가 코드를 작성해야 합니다 пull. 예를 들면 다음과 같습니다.
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
단순한 대신에:
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
이러한 종류의 자세한 정보는 길이가 0인 배열 대신 null을 반환하는 거의 모든 메서드 호출에 필요합니다. 클라이언트 개발자가 결과를 처리하기 위해 특수 코드를 작성하지 않았을 수 있으므로 오류가 발생합니다 null. 이러한 메서드는 일반적으로 하나 이상의 개체를 반환하므로 오류는 수년 동안 감지되지 않을 수 있습니다. null배열 대신 반환하면 배열을 반환하는 메서드 자체가 복잡해진다는 점도 언급해야 합니다 . null을 반환하는 것이 메모리에 배열을 할당하는 비용을 피하기 때문에 길이가 0인 배열을 반환하는 것보다 낫다는 주장이 가끔 있습니다. 이 주장은 두 가지 이유로 실패합니다. 첫째, 프로그램 프로파일링에서 이 특정 방법이 성능 저하의 주요 원인임을 보여주지 않는 한 이 수준에서 성능에 대해 걱정할 필요가 없습니다. 둘째, 레코드를 반환하지 않는 메서드에 대한 각 호출은 동일한 길이가 0인 배열을 클라이언트에 전달할 수 있습니다. 길이가 0인 배열은 변경할 수 없고 변경할 수 없는 개체를 공유할 수 있기 때문입니다. 실제로 표준 관용어를 사용하여 컬렉션의 요소를 유형 제어 배열로 덤프할 때 정확히 이런 일이 발생합니다.
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
이 관용구에서는 길이가 0인 배열 인 상수toArray 가 메서드에 전달되어 반환해야 하는 형식을 나타냅니다. 일반적으로 메서드는 toArray반환된 배열에 메모리 공간을 할당하지만 컬렉션이 비어 있으면 입력 배열에 배치되고 사양에서는 Сollесtion,tоАггау(Оbjесt[])입력 배열이 컬렉션을 포함할 만큼 충분히 큰 경우 그것이 반환되도록 보장합니다. 따라서 제시된 관용구는 길이가 0인 배열을 메모리에 할당하지 않고 "유형별 상수"를 사용합니다. 요약해보자. 배열 메서드가 길이가 0인 배열이 아닌 null을 반환할 이유가 없습니다. 이 관용구는 배열의 길이가 배열 자체와 별도로 반환되는 C 프로그래밍 언어에서 유래한 것으로 보입니다. C에서는 길이가 0인 배열에 메모리를 할당하는 것은 쓸모가 없습니다. 출처: Joshua Bloch, Java TM 효과적인 프로그래밍, Lori Publishing House
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION