자바에는 크게 4개의 List 인터페이스를 구현한 클래스가 있다.
- Vector, ArrayList, LinkedList, CopyOnWriteArrayList
그 중 가장 생소한 이름이 있는데 CopyOnWriteArrayList이다. CopyOnWriteArrayList는 그냥 ArrayList랑 다르길래 화려한 이름을 가지고 있는걸까?
ArrayList vs CopyOnWriteArrayList
일반 ArrayList의 경우 스레드에 안전하게 설게되어 있지 않기때문에 만약 스레드 처리가 필요한 List의 경우에 Vector를 사용하거나 ArrayList에 synchroized를 사용하여 처리하였다. 하지만 자바 1.5부터 있던 CopyOnWriteArrayList를 쉽게 이문제를 해결할 수 있다.
CopyOnWriteArrayList의 경우 ArrayList와 모든 부분이 동일하나 어디에 컨텐츠를 전달할 때 컨텐츠를 복사해서 전달한다. 그렇기 때문에 전달 후 해당 List의 내용이 변경될 것을 우려하지 않아도 된다.
CopyOnWriteArrayList는 그냥 ArrayList보다 물론 부담이 있을수 있다. 하지만 잘못설계된 동기화코드보다 더 안전하고 비용이 절감될 수도 있다.
그리고 CopyOnWriteArrayList는 객체를 매번 복사하는 것이 아니라 전달시 해당 상태를 스냅샷으로 가지고 있는 방식으로 진행한다.
자세한 내용은 아래 사이트를 참조하면 도움이 될 것이다.
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
'JAVA > JAVA 관련' 카테고리의 다른 글
문자열 정수를 int 형 정수로 변경하는 atoi 함수를 자바로 구현 (0) | 2018.06.06 |
---|---|
java 메모리 누수 주된 원인 (0) | 2018.05.28 |
HashMap에서 사용되는 인스턴스 객체의 equals()와 hashCode() 재 정의 중요성 (0) | 2018.05.28 |
자바 Annotation 만들기 (0) | 2018.05.28 |
Java Reflection 설명 및 사용법 (0) | 2018.05.28 |