54. null이 아닌, 빈 컬렉션이나 배열을 반환하라.

무한성장개발자·2025년 9월 25일

package me.whiteship.chapter08.item54;

import java.util.List;

public class CheeseExample {

    public static void main(String[] args) {
        CheeseStore cheeseStore = new CheeseStore();
        List<Cheese> cheese = cheeseStore.getCheese();
        if (cheese != null && !cheese.isEmpty()) {
            System.out.println("We have cheese: " + cheese);
        } else {
            System.out.println("We have no cheese");
        }
    }
}
package me.whiteship.chapter08.item54;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CheeseStore {

    private final List<Cheese> cheesesInStock = new ArrayList<>();

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

    public CheeseStore(Cheese... initialCheeses) {
        for (Cheese cheese : initialCheeses) {
            addCheese(cheese);
        }
    }

    private void addCheese(Cheese cheese) {
        cheesesInStock.add(cheese);
    }

    public List<Cheese> getCheese() {
        return cheesesInStock.isEmpty() ? null : new ArrayList<>(cheesesInStock);
    }

//    public Cheese[] getCheeseArray() {
//        return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
//    }
}

비어있으면 null을 return하는게 아니라 비어있는 Collections를 리턴한다.

package me.whiteship.chapter08.item54;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CheeseStore {

    private final List<Cheese> cheesesInStock = new ArrayList<>();

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

    public CheeseStore(Cheese... initialCheeses) {
        for (Cheese cheese : initialCheeses) {
            addCheese(cheese);
        }
    }

    private void addCheese(Cheese cheese) {
        cheesesInStock.add(cheese);
    }

//    public List<Cheese> getCheese() {
//        return cheesesInStock.isEmpty() ? null : new ArrayList<>(cheesesInStock);
//    }

    public List<Cheese> getCheese() {
        return new ArrayList<>(cheesesInStock);
    }

//    public Cheese[] getCheeseArray() {
//        return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
//    }
}
package me.whiteship.chapter08.item54;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CheeseStore {

    private final List<Cheese> cheesesInStock = new ArrayList<>();

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

    public CheeseStore(Cheese... initialCheeses) {
        for (Cheese cheese : initialCheeses) {
            addCheese(cheese);
        }
    }

    private void addCheese(Cheese cheese) {
        cheesesInStock.add(cheese);
    }

    public List<Cheese> getCheese() {
        return cheesesInStock.isEmpty() ? Collections.EMPTY_LIST : new ArrayList<>(cheesesInStock);
    }

//    public Cheese[] getCheeseArray() {
//        return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
//    }
}

이렇게 할 수도 있다.

package me.whiteship.chapter08.item54;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CheeseStore {

    private final List<Cheese> cheesesInStock = new ArrayList<>();

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

    public CheeseStore(Cheese... initialCheeses) {
        for (Cheese cheese : initialCheeses) {
            addCheese(cheese);
        }
    }

    private void addCheese(Cheese cheese) {
        cheesesInStock.add(cheese);
    }

    public List<Cheese> getCheese() {
        return cheesesInStock.isEmpty() ? null : new ArrayList<>(cheesesInStock);
    }

    public Cheese[] getCheeseArray() {
        return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
    }
}

null을 return하는 코드를 만들면 불편하다.

0개의 댓글