2016년 2월 19일 금요일

컬렉션 프레임워크(Collection Framework) 란?

1) Collection Framework

- 배열의 단점을 보완한 데이터 군을 저장하는 클래스들을 표준화한 설계이다.
- 다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스들로 구성된다.
- 컬렉션(collection) : 다수의 데이터, 데이터 그룹을 의미한다.
- 프레임워크(framework) : 표준화, 정형화된 체게적인 프로그래밍 방식이다.
- 컬렉션 클래스(collection class) : 다수의 데이터를 저장할 수 있는 클래스이다.

2) Collection 종류



 인터페이스
 특 징
 List
순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
--> 데이터를 add하면 앞에서 부터 순차적(순서대로)으로 데이터가 들어간다. 
       그래서 각각의 저장되어 있는 공간들은 고유한 index를 갖는다. 
ex.) 대기자 명단
구현 클래스: ArrayList, LinkedList, Stack, Vector등
 Set
순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
--> 집합이다. 데이터가 순서와는 상관없이 add된다. 중복되지 않는다.
ex.) 양의 정수 집합, 소수의 집합
구현 클래스: HashSet, TreeSet등
 Map
키와 값의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값을 중복을 허용한다.
ex.) 우편번호, 지역번호
구현 클래스: HashMap, TreeMap, Hashtable, Properties등


3) 배열과 비교

3-1 ) String[]와 ArrayList 

 - String[] arrayObj = new String[2]; // 배열의 크기 지정--> 생성후 변경 불가
 - ArrayList<String> al = new ArrayList<String>();  // 배열과 비슷하나, 객체 생성후 몇개      의 값을 사용할 지 지정할 필요가 없다.

3-2 ) 중복을 허용하는 List/ 중복 허용하지 않는 Set

 - ArrayList : 중복을 허용하며 데이터가 순서대로 정렬된다.
 - HashSet : 중복을 허용하지 않으며 순서대로 정렬되지 않는다.

3-3 ) Map

 - Map은 iterator 기능이 없기 때문에 Map의 데이터를 가지고 있는 Set을 만들고 Set에 들    어가 있는 데이터 타입은 Map.Entry이다. (Set에 있는 값은 Map에 있는 값이 대응된다.
   --  > Map에 있는 값을 getKey( ), getValue( )로 알아낸다.)


Iterator itKey = map.keySet().iterator();
// key값만 가져오는 경우
while(itKey.hasNext()) {
System.out.println(itKey.next());
}

Iterator itValue = map.values().iterator();
int totalSum = 0;
// value값만 가져오는 경우
while(itValue.hasNext()) {
Student s = itValue.next();
System.out.println(s);
totalSum += s.total;
}

3-4) Vector 와 ArrayList 

- List 인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다.
- ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일하다.
- 데이터의 저장공간으로 배열을 사용한다. (배열기반)
- Vector는 자체적으로 동기화처리가 되어 있으나 ArrayList는 그렇지 않다.
- Object배열을 이용해서 데이터를 순차적으로 저장한다.
- 배열에 더이상 공간이 없으면 보다 큰 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장된다.
- ArrayList는 removeRange()를 제외한 모든 메서드가 Vector 메서드와 일치한다.

5. Iterator

컬렉션 프레임워크에서 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 하였다. 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, Collection인터페이스에는 Iterator (Iterator를 구현한 클래스의 인스턴스)를 반환하는 iterator()를 정의하고 있다. iterator()는 Collection인터페이스에 정의된 메서드이므로 Collection인터페이스의 자손인 List와 Set에도포함되어 있다. 그래서 List나 Set인터페이스를 구현하는 컬렉션은 iterator()가 각 컬렉션의 특징에 알맞게 작성되어 있다.

6. 동기화(Synchronization)

- 멀티쓰레드(multi-thread) 프로그래밍에서는 하나의 객체를 여러 쓰레드가 접근할 수 있기 때문에 데이터의 일관성(consistency)을 유지하기 위해 동기화가 필요하다.
- Vector와 같은 구버전 클래스들은 자체적으로 동기화처리가 되어있다.
- ArrayList와 같은 신버전 클래스들은 별도의 동기화처리가 필요하다.
- 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)



*reference
  • http://gangzzang.tistory.com/entry/Java-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8DCollection-Framework
  • http://devbox.tistory.com/entry/Java-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC
  • 자바-컬렉션-프레임워크-인터뷰-질문-40개http://starplatina.tistory.com/entry/%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%9D%B8%ED%84%B0%EB%B7%B0-%EC%A7%88%EB%AC%B8-40%EA%B0%9C










Share:

0 개의 댓글:

댓글 쓰기