1급 컬렉션은 리스트나 세트 같은 컬렉션을 하나만 가지고 있는 클래스예요. 마치 소중한 물건을 상자에 넣어서 보관하는 것과 비슷합니다.
// 어디서든 게임 결과를 마음대로 조작 가능
List<GameResult> results = new ArrayList<>();
results.add(new GameResult("승"));
results.add(new GameResult("패"));
// 다른 곳에서도...
results.clear(); // 앗! 실수로 다 지워버렸다
public class GameResults {
private final List<GameResult> results = new ArrayList<>();
public void addResult(GameResult result) {
results.add(result);
}
public int getWinCount() {
return (int) results.stream()
.filter(r -> r.isWin())
.count();
}
}
// 사용할 때
GameResults gameResults = new GameResults();
gameResults.addResult(new GameResult("승"));
int wins = gameResults.getWinCount(); // 승리 횟수를 쉽게 조회
은행 계좌를 생각해보세요:
// 장바구니 - 1급 컬렉션
public class ShoppingCart {
private final List<Product> products = new ArrayList<>();
public void addProduct(Product product) {
if (products.size() >= 100) {
throw new IllegalStateException("장바구니가 가득 찼습니다!");
}
products.add(product);
}
public int getTotalPrice() {
return products.stream()
.mapToInt(Product::getPrice)
.sum();
}
}
getTotalPrice() 같은 이름으로 의도가 분명함한 줄 요약: 컬렉션을 전용 상자에 넣고, 정해진 구멍으로만 물건을 넣고 빼게 만드는 것! 이렇게 하면 실수가 줄고 코드가 깔끔해집니다.