가자미의 개발이야기
[에러] java.util.ConcurrentModificationException 본문
평화로운 토요일 오전... 알바를 하며 자바 공부를 하고 있었다.
내가 쓴 코드를 보자.
public class Ch1 {
//using predicate!
public static List<Player> filterPlayer(List<Player> list, playerPredicate p) {
List<Player> result = new ArrayList<>();
for (Player i : list) {
if (p.test(i)) {
list.add(i);
}
}
return result;
}
public static void printPlayer(List<Player> list){
for(Player i : list){
System.out.println(i);
}
}
public static void main(String[] args){
List<Player> list = new ArrayList<>();
list.add(new Player(20, 15, "PG"));
list.add(new Player(30, 25, "SG"));
list.add(new Player(50, 45, "CT"));
List<Player> result = filterPlayer(list, new cheapPlayer());
printPlayer(list);
}
}
프레디케이트를 활용한 동적 파라미터 전달하는 예제의 일부다.
실행을 시켜봤더니.. 다음과 같은 에러가 발생했다.
언뜻 보니 arraylist부분에서 발생한거 같다.
에러 메시지의 역순으로 찾아가보니,
List<Player> result = filterPlayer(list, new cheapPlayer());에서 문제가 발견됐고,
filterPlayer 메소드의 반복문 블록에서 문제가 발생했다.
그러면 이쯤에서 ConcurrentModificationException에 대해 알아보자.
이 에러는 어떤 컬렉션에서 반복문을 돌고 있는데, 반복 중에 컬렉션의 요소를 제거하거나 추가하려고 하면 생기는 문제다!!!
이번 예시에서는 list.add(i)가 아니라 result.add(i)를 해야 문제가 해결된다!!
'Java' 카테고리의 다른 글
객체지향에 대해 간략한 정리 (0) | 2021.07.26 |
---|