Collections 동기화

rivermt·2023년 4월 4일
0

JAVA

목록 보기
5/9

컬렉션의 동기화

멀티 쓰레드 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 일관성을 유지하기 위해 공유되는 객체에 동기화(synchronization)가 필요하다.

Vector, Hashtable 같은 구버전(JDK1.2 이전)의 클래스들은 자체적으로 동기화 처리가 되어 있지만, 멀티 쓰레드 환경이 아닌 경우 불필요한 기능이 되고 이는 성능 저하의 요인이 될 수 있게된다.

따라서 새로 추가된 ArrayList, HashMap과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collections 클래스의 동기화 메서드를 이용하여 동기화 처리가 가능하도록 변경하였다.

static Collection synchronizedCollection(Collection c)
static List synchronizedList(List list)
static Set synchronizedSet(Set s)
static Map synchronizedMap(Map m)
static SortedSet synchronizedSortedSet(SortedSet s)
static SortedMap synchronizedSortedMap(SortedMap m)

변경불가 컬렉션

컬렉션에 저장된 데이터를 보호하기 위해서 컬렉션을 변경할 수 없게, 즉 읽기 전용 으로 만들어야 할 때가 있다. 주로 멀티쓰레드 환경에서 여러 쓰레드가 하나의 컬렉션을 공유할 때 데이터의 손상을 방지하기 위해 아래와 같은 메서드를 사용한다.

static Set unmodifiableSet(Set s)
static Map unmodifiableSet(Map m)
static NavigableSet unmodifiableNavigableSet(Set s)
static SortedSet unmodifiableSortedSet(Set s)
static NavigableMap unmodifiableNavigableMap(NavigableMap m)
static SortedMap unmodifiableSortedMap(SortedMap m)

싱글톤 컬렉션 만들기

단 하나의 객체만을 저장하는 컬렉션인 싱글톤 컬렉션의 경우

static List singletonList(Object o)
static Set singletonSet(Object O)
static Map singletonMap(Object O)

한 종류의 객체만 저장하는 컬렉션 만들기

컬렉션에 모든 종류의 객체를 저장할 수 있다는 것은 장점이기도 하고 단점이기도 하다.
대부분의 경우 한 종류의 객체를 저장하고, 컬렉션에 지정된 종류의 객체만 저장할 수 있도록 제한하고 싶을 떄 아래처럼 checked를 붙인 메서드를 활용할 수 있다.

List list = new ArrayList();
List checkedList = checkedList(list, String.class); // String만 저장 가능
checkedList.add("abc"); // OK
checkedList.add(new Integer(3); // error (ClassCastException 발생)
profile
화이팅!!

0개의 댓글