핵심 정리
- 기존 인터페이스에 디폴트 메서드 구현을 추가하는 것은 위험한 일이다.
- 디폴트 메서드는 구현 클래스에 대해 아무것도 모른 채 합의 없이 무작정 “삽입”
될 뿐이다.
- 디폴트 메서드는 기존 구현체에 런타임 오류를 일으킬 수 있다.
- ConcurrentModificationException 이 멀티 스레드 상황에서 발생 가능하다.
- 인터페이스를 설계할 때는 세심한 주의를 기울여야 한다.
- 서로 다른 방식으로 최소한 세 가지는 구현을 해보자.
완벽 공략 38. ConcurrentModificationException
현재 바뀌면 안되는 것을 수정할 때 발생하는 예외
- 멀티 스레드가 아니라 싱글 스레드 상황에서도 발생할 수 있다. 가령, fail-fast 이
터레이터를 사용해 콜렉션을 순회하는 중에 콜렉션을 변경하는 경우