반응형
컬렉션 프레임워크
자바에서는 많은 수의 다양한 패키지(Java API)를 제공하여 개발자들이 자바 어플리케이션을 쉽게 개발할 수 있도록 도와준다.
그 중 컬렉션 프레임워크에 대해 알아보겠다.
컬렉션 프레임워크는 다수의 데이터를 쉽게 처리할 수 있는 표준화된 방법을 제공하는 클래스이다.
컬렉션 프레임워크의 핵심 인터페이스
- List, Set, Map
각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스르 정의하고, 인터페이스 List와 Set의 공통된 부분을 다시 뽑아서 새로운 인터페이스인 Collection을 추가로 정의하였다.
List
- 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
- ArrayList, LinkedList, Stack, Vector 등
Set
- 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.
- HashSet, TreeSet
Map
- 키(Key)와 값(Value)의 쌍(Pair)로 이루어진 데이터의 집합
- 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
- HashMap, TreeMap, Hashtable, Properties
컬렉션프레임워크의 동기화(Synchronization)
멀티쓰레드(multi-thread) 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 일관성(consistency)을 유지하기 위해서 동기화(synchronization)가 필요하다.
jdk1.2버전 이전에는 Vector와 Hashtable 클래스들은 자체적으로 동기화 처리가 되어 있었다. 따라서 멀티쓰레드 프로그래밍이 아닌 성능을 떨어트리는 요인이 되었다.
그래서 추가된 arrayList와 HashMap과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collections 동기화 메서드를 이용해서 동기화처리가 가능하도록 변경하였다.
(java.util.Collection은 인터페이스 이고, java.util.Collections는 클래스)
- static Collection synchronizedCollection(Collection c)
- static List synchronizedList(List list)
- static map synchronizedMap(Map m)
- static Set synchronizedSet(Set s)
- static SortedMap synchronizedSortedMap(SortedMap m)
- static SortedSet synchronizedSortedSet(SortedSet s)
thread-safe한 컬렉션프레임워크 사용방법
List list = Collections.synchronizedList(new ArrayList( … ));
Map.Entry 인터페이스
Map.Entry 인터페이스는 Map 인터페이스의 내부 인터페이스이다.(내부 클래스(inner class)와 같이 인터페이스도 이처럼 인터페이스 안에 인터페이스를 정의하는 내부 인터페이스(inner interface)를 정의하는 것이 가능하다.
Map에 저장되는 key-value쌍을 다루기 위해 내부적으로 Entry 인터페이스를 정의해 놓음
1 2 3 4 5 6 7 8 9 10 | public interface Map{ ... interface Entry{ Object getKey(); Object getValue(); Object setValue(Object value); boolean equals(Object o); int hashCode(); } } | cs |
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] 네트워크 프로그래밍 TCP 소켓 통신 (5) | 2018.07.08 |
---|---|
[JAVA] 자바7 try-with-resources문, multicatch 문 (1) | 2018.07.08 |
[JAVA] JVM 메모리구조 (0) | 2018.06.29 |
[JAVA] RSA를 이용한 전자서명 및 복호화 (0) | 2018.06.13 |
[JAVA] Comparable, Comparator 정렬 (0) | 2018.04.09 |