티스토리 뷰

Java/Class

6. Collections Framework

알 수 없는 사용자 2018. 10. 23. 03:01


이번 포스팅에서는

Collection Framework에 대해서

알아보도록 하겠습니다.

전체적인 개념만 살펴보고 

세부사항은 하나하나

뒤에서 다루겠습니다.


================================================================


Collections Framework





1. Collections Framework : What?


  Collections Framework는 Java API 문서에서 데이터군을 다루고 표현하기 위한 단일화된 구조라고 정의하고 있습니다.

 Collection은 다수의 데이터 그룹을 뜻하고, Framework는 표준화된 프로그래밍 방식을 뜻합니다.


즉, Collections Framework는 데이터군을 저장하는 클래스들을 표준화한 설계, 객체관리를 용이하게 하기 위해 설계된 것이라 말할 수 있습니다.


JDK 1.2버전 이전까지는 Vector, Hashtable, Properties와 같은 컬렉션 클래스, 다수의 데이터를 저장할 수 있는 클래스들을 서로 다른 방식으로 처리해야 했으나

이후 버전부터는 Collection Framework를 사용해 다양한 종류의 컬렉션 클래스가 추가되고 표준화된 방식으로 사용이 가능해졌습니다.



Collections Framework는 사용 목적에 따라 크게 4가지 인터페이스로 나뉩니다. List, Set, Queue는 비슷한 특성을 가지기 때문에 Collection 인터페이스를 상속합니다.

하지만 Map은 이들과는 전혀 다른 형태로 다루어지기 때문에 Collection 상속계층도에 포함되지는 않습니다. 

이러한 Map은 계층도로는 Collection에 포함되지 못하지만 Collection 인터페이스는 단순히 공통적인 메서드인 iterator()를 뽑아서 중복을 제거하기 위한 것에 불과하여 Collection Framework라 부릅니다. 






2. Collections Framework : When, Why?


 Collections Framework를 사용하지 않고 다수의 객체를 다루기 위해서는 배열을 사용해야 합니다.

class Soldier {
private String name;
private int age;

public Soldier(String n, int a) {
name = n;
age = a;
}
}
public class Source01_Collection {
public static void main(String[] args) {
Soldier[] army = new Soldier[3];
Soldier s = new Soldier("짐레이너", 34);
for(int i =0; i <army.length; i++) {
if(Math.random()>0.9) { // 랜덤확률로 s 객체를 배열에 생성
army[i] = s;
break;
}else {
army[i] = new Soldier("익명", 1);
}
}
boolean find = false;
for(int i =0; i<army.length; i++) { // s객체가 있는지 확인
if(army[i] == s) {
find = true;
}
}
System.out.println(find);
}
}


 다음과 같이 배열을 사용하여 다수의 Soldier 객체를 이용한다면 상당히 번거로운 작업이 필요합니다.

배열 안에서 특정 객체가 존재하는지 찾는 과정, 객체를 저장할 때 특정 객체가 존재하는지 확인하고 없을 때만 저장하는 작업 등 이런 작업들은 배열의 모든 객체를 탐색하고 비교해야 하는 작업이기 때문에 개발자가 비슷한 코드를 반복적으로 귀찮게 구현해야 한다는 점이 있습니다.


이를 Collection Framework를 통해 프로그래머의 짐을 덜어줍니다.

또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있습니다.







3. Collections Framework : Set Interface?


 Set 인터페이스의 특징은 데이터를 중복으로 저장하지 않는다는 것입니다. 

중복데이터를 제거하면서 객체를 모으기는 편안한데 집합 안에서의 특정 객체를 다이렉트로 확보하여 사용하기에는 힘든 특징이 있습니다.




Set 인터페이스에서 자주 사용하는 Set 클래스를 3가지 정도 볼 수 있습니다.


- HashSet : 가장 빠른 연산을 처리하지만, 저장하는 데이터의 순서를 보장하지 않습니다.

- LinkedHashSet : 들어가는 데이터의 순서를 유지하지만, HashSet 보다 연산이 느립니다.

- TreeSet : 이진 검색 트리라는 자료구조의 형태로 데이터를 저장합니다. 저장순서를 유지하지 않지만 크기에 따른 정렬을 지원하고 HashSet 보다 연산이 느립니다.







4. Collections Framework : List Interface?


 List는 Set과 달리 중복 객체를 허용하고 특정 객체의 위치를 알려주는 특징이 있습니다.

마치 배열과 같이 index를 통해 특정 객체의 위치를 알려주는데 index를 통해 특정 객체를 확보하기 때문에 특정 객체 확보에 용이합니다.



List의 대표적인 클래스는 3가지입니다.


- Vector : 이 클래스는 Collection Framework가 만들어지기 전에 생성된 클래스로 기존에 사용하던 프로그램을 위해 존재하는 클래스입니다. 현재는 거의 사용하지 않습니다.

- ArrayList : 배열 기반으로 Vector의 문제점을 개선해 만든 클래스로 현재 Collection 중 가장 많이 사용됩니다.

- LinkedList : ArrayList가 배열기반이지만 LinkedList는 배열 기반이 아닙니다. 때문에 구조가 간단하고 사용하기 쉽고 데이터를 읽어오는 시간이 가장 빠르지만 크기를 변경할 수 없고 데이터의 추가 또는 삭제의 시간이 많이 걸리는 단점이 있습니다.


List 인터페이스에서는 만약 사용하고자 하는 데이터의 내부 객체의 변화가 없다면 ArrayList가 효율이 좋으나 변화가 있다면 LinkedList의 효율이 좋습니다.







5. Collections Framework : Queue Interface?


 Queue는 저장시켜둔 객체를 하나씩 제거하면서 뽑을 수 있게 구현시켜둔 컬렉션입니다. 객체의 중복을 허용하고 먼저 들어간 객체가 먼저 나오는 FIFO 구조로 되어있습니다.


 가장 처음 저장된 객체는 제일 앞쪽에 위치하게 되고 순차적으로 저장되는 데이터가 그 뒤로 쌓이게 됩니다. 이 데이터를 뽑아낼 때는 가장 먼저 들어온 객체부터 순차적으로 뽑아낼 수 있는 구조입니다.



Queue는 대표적으로 PriorityQueue가 있지만 주로 Deque 형태로 사용됩니다.


- PriorityQueue : 저장순위에 상관없이 크기(우로 정렬해놓고 Queue의 기능을 합니다.

- Deque : Queue가 한 방향으로 뿐이 데이터를 이동시키지 못하는 단점을 보완하여 어느 방향이든 데이터를 저장하고 뺄 수 있도록 설계되어있습니다. 하지만 List처럼 중간에서 삭제, 추가는 불가능합니다.







6. Collections Framework : Map Interface?


 Map 인터페이스의 경우 일반적인 Collection과 사용법이 다릅니다. 

객체 값에 부여할 키 값을 같이 설정하여 객체를 저장하는 방식입니다. 만약 객체를 삭제하거나 확보해야 하는 상황이라면 키값을 사용해야 합니다.

객체 자체는 중복저장이 되지만 키값은 중복저장이 되지 않습니다. 또한 저장 순서는 임의대로 저장되고 키값을 사용하기 때문에 특정 객체를 뽑아서 사용할 때 속도가 빠릅니다.




 - Hashtable : 구버전에서 사용되던 클래스로 Vector와 같이 아직 사용자들을 위해 남아있습니다.

 - HashMap : 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보입니다.

 - TreeMap : 이진 검색 트리의 형태로 검색과 정렬에 적합한 클래스입니다. 검색에 관한 부분은 HashMap이 좋지만 범위 검색이나 정렬의 경우에 사용하면 좋습니다.

 - Properties : Hashtable을 상속받아 구현된 클래스로 키와 값을 (String, String) 형태로 저장하는 보다 단순화된 컬렉션 클래스입니다.





'Java > Class' 카테고리의 다른 글

8. Collections Framework : List  (0) 2018.10.29
7. Collections Framework : Set  (0) 2018.10.25
5. Wrapper Class  (0) 2018.10.22
4. 정규표현식(Regular Expression) : java.util.regex 패키지  (0) 2018.10.19
3. StringBuffer & StringBuilder  (0) 2018.10.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함