2.4 순회하며 컬렉션 수정하지 않기
class Inventory { private List<Supply> supplies = new ArrayList<>(); void disposeContaminatedSupplies() { for (Supply supply : supplies) { if (supply.isContaminated()) { supplies.remove(supply); } } } }
코드에서는 항상 배열이나 리스트를 비롯해 다양한 자료 구조를 순회합니다. 대부분 자료 구조를 읽기만 하죠. 예를 들어 주문 항목 리스트에서 송장을 생성하거나 이름 순서 리스트에서 어떤 항목을 찾는 작업을 하죠. 하지만 자료 구조를 바꾸려면 조심해야 합니다. 프로그램이 충돌할 위험이 있습니다.
위 코드는 매우 간단한 자료 구조인 supplies List 순회를 보여줍니다.(재고가 변질되었으면) supply가 isContaminated()이면 재고 시스템이 List에서 supply를 제거합니다.
완전무결해 보이네요. 그런가요?