Collections

CODEDRAGON Development/Algorithm, DataStructure

반응형


 

 

 

Collections

배열과 관련된 메소드를 Arrays클래스가 제공하는 처럼, 컬렉션과 관련된 메소드를 제공하는 클래스입니다.

 

 

Collection vs Collections

Collection

Collections

인터페이스

클래스

 

 

 

컬렉션 동기화

멀티쓰레드(multi-thread)프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 있어 데이터의 일관성(consistency)) 유지하기 위해서는 공유되는 자원(객체) 대해 동기화(synchronization) 해야 합니다.

 

 

이전버전(JDK 1.2이전)

Vector Hashtable 같은 JDK 1.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)

 

 

동기화 메소드 사용

List syncList = Collections.synchronizedList(new ArrayList());

 

 

 

변경 불가 컬렉션 생성하기

컬렉션에 저장된 데이터를 보호하기 위해서 컬렉션을 읽기전용으로 만들 있습니다.

주로 멀티쓰레드 환경에서 여러 쓰레드가 하나의 컬렉션을 공유할 경우 데이터가 손상될 있는데 이를 방지하기 위해서 사용합니다.

 

·       static Collection unmodifiableCollection(Collection c)

·       static List unmodifiableList(List list)

·       static Set unmodifiableSet(Set s)

·       static Map unmodifiableMap(Map m)

·       static NavigableSet unmodifiableNavigableSet(NavigableSet s)

·       static SortedSet unmodifiableSortedSet(SortedSet s)

·       static NavigableMap unmodifiableNavigableMap(NavigableMap m)

·       static SortedMap unmodifiabledSortedMap(SortedMap m)

 

 

 

싱글톤(singleton) 컬렉션 생성

인스턴스를 new연산자가 아닌 메소드를 통해서만 생성할 있어 인스턴스의 개수를 제한할 있는 싱글톤 기능을 통해 컬렉션을 생성합니다.

매개변수로 저장할 요소를 지정하면 해당 요소를 저장하는 컬렉션을 반환하며 반환된 컬렉션은 변경할 없습니다.

·       static List singletonList(Object o)

·       static Set singleton(Object o) //함수명이 singletonSet아님

·       static Map singletonMap(Object key, Object value)

 

 

 

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

컬렉션에는 모든 종류의 객체를 저장할 있다는 장점이 있기도 하지만 이것이 단점이 되기도 합니다.

제네릭(generics)으로 컬렉션에 저장할 요소의 타입을 제한할 수도 있지만 호환성을 위해 제공합니다. 제네릭을 사용하기 위해서는 JDK 1.5부터 가능하며 이전으로 작성된 코드를 사용할 필요하게 됩니다.

대부분의 경우 종류의 객체만 저장하며 컬렉션에 지정된 종류의 객체만 저장하고자 경우에는 아래의 메소드를 사용하면 됩니다.

 

·       static Collection checkedCollection(Collection c, Class type)

·       static List checkedList(List list, Class type)

·       static Set checkedSet(Set s, Class type)

·       static Map checkedMap(Map m, Class keyType, Class valueType)

·       static Queue checkedQueue(Queue queue, Class type

·       static NavigableSet checkedNavigableSet(NavigableSet s, Class type)

·       static SortedSet checkedSortedSet(SortedSet s, Class type)

·       static NavigableMap checkedNavigableMap(NavigableMap m, Class keyType, Class valueType)

·       static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType)

 

 

사용 방법

번째 매개변수에 저장할 객체의 클래스를 지정합니다.

List list = new ArrayList();

//String.class으로 String 저장가능하도록 설정

List checkedList = checkedList(list, String.class);

checkedList.add("codedragon"); //정상 추가

checkedList.add(new Integer(3)); //ClassCastException 발생

 

 


반응형