[WHY]
1. null을 반환하는 메서드를 사용할 때면 방어 코드를 넣어야 하기 때문이다.
- 코드가 지저분해주고 API를 사용하는 사용자 입장에서 사용하기 어렵다.
- 잘못된 사용으로 버그의 원인이 될 가능성이 있다.
2. null을 반환함으로서 객체 생성 비용을 줄여 성능에 도움을 줄 수 있으나 더 좋은 기법이 있기 때문이다.
[WHEN]
컬렉션이나 배열을 반환할 때
[HOW]
1. 간단한 방법
컬렉션 : 빈 컬렉션을 반환할 때마다 생성하여 요소의 개수가 0개이든 N개이든 넣어서 반환한다.
private final List<Cheese> cheeseInStock = new LinkedList<>();
public List<Cheese> getCheese() {
return new ArrayList<>(cheeseInStock);
}
배열 : 반환할 때 마다 배열을 생성한다.
2. 최적화 방법
컬렉션 : 불변 컬렉션 객체를 미리 생성하고 필요할 때 꺼내 쓴다. EX) Collection.emptyList() 등
private final List<Cheese> cheeseInStock = new LinkedList<>();
public List<Cheese> getCheese() {
return cheeseInStock.isEmpty() ? Collections.emptyList() : new ArrayList<>(cheeseInStock);
}
배열 : 1번 간단한 방법과 차이가 없다. 배열을 미리 할당하는 것이 성능상 이점이 명확하지 않기 때문에 사용하지 않는다고 함.
private final List<Cheese> cheeseInStock = ...;
//new Cheese[0]은 toArray 메서드에 반환 타입을 알려주는 역할을 할 뿐이다.
public Cheese[] getCheese() {
return cheeseInStock.toArray(new Cheese[0]);
}
'programming > java' 카테고리의 다른 글
Item4. 인스턴스화를 막으려거든 pricate 생성자를 사용하라 (0) | 2023.03.23 |
---|---|
Item 55. 옵셔널 반환은 신중히 하라 (0) | 2023.03.17 |
Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2023.03.16 |
Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.03.13 |
Item1. 생성자 대신 정적 팩터리 메서드를 고려하라. (0) | 2023.03.13 |