하지만 시대가 변했습니다. 자바 API는 거대해졌고 목표 달성을 도와줄 String이나 List와 같은 클래스가 많이 생겼습니다. API에 있는 기능을 다시 구현하지 말고 가능하면 재사용해야 합니다. 전문가들이 끊임없이 자바 API를 작성하고 최적화하면서 빠르고 버그도 거의 없는 표준 라이브러리가 만들어지고 있습니다.
2.4 순회하며 컬렉션 수정하지 않기에서 본 재고 시스템과 몇 가지 지식을 활용해 봅시다. 위 코드의 getQuantity() 메서드는 재고 내 Supply의 수량을 반환합니다.
코드는 언뜻 훌륭해 보입니다. 메서드는 null 값이 없도록 입력 매개변수를 검증합니다. 7.3 구체 타입보다 추상 타입에서 권고하듯이 내부 자료 구조로서 추상 타입을 사용하고 있습니다. 또한 2.3 For 루프 대신 For-Each 루프에서 추천했듯이 일반적인 2.3 For 루프 대신 For-Each 루프로 자료 구조를 순회합니다.
이 코드는 필요 이상으로 너무 장황해 대폭 개선할 수 있습니다.
class Inventory { private List<Supply> supplies = new ArrayList<>(); int getQuantity(Supply supply) { Objects.requireNonNull(supply, "supply must not be null"); return Collections.frequency(supplies, supply); } }