728x90
- 컬렉션 프레임웍이란, "데이터 군을 저장하는 클래스들을 표준화한 설계"를 뜻한다.
- 컬렉션 프레임웍의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있다.
- List: 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
- 구현클래스: ArrayList, LinkedList, Stack, Vector 등
- Set: 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
- 구현클래스: HashSet, TreeSet 등
- Map: 키와 값으로 쌍으로 이루어진 데이터의 집합, 순서는 유지되지 않으며 키의 중복은 허용되지 않지만 값의 중복은 허용된다
- 구현클래스: HashMap, TreeMap, HashTable, Properties 등
- List: 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
- Collection 인터페이스는 List 인터페이스와 Set 인터페이스의 공통된 부분을 분리하여 정의한 인터페이스이다.
- ArrayList는 List 인터페이스를 구현한 컬렉션 클래스로 저장순서가 유지되며 데이터의 중복을 허용한다.
Object 배열을 이용해서 데이터를 순차적으로 저장하다가 더 이상 저장할 공간이 없다면 보다 큰 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음 저장한다.
Object 배열을 사용하기 때문에 모든 객체를 담을 수 있다. - ArrayList에서 데이터의 삭제는 삭제할 객체의 바로 뒤에 있는 데이터를 한 칸씩 앞으로 복사해서 덮어쓰는 방식으로 처리한다.
때문에 다루는 데이터의 개수가 많을수록 배열의 중간에 값을 추가하거나 삭제하는 기능의 작업시간이 오래 걸린다. - 일반적인 배열의 경우 크기를 변경할 수 없고 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다는 단점이 있다.
이러한 배열의 단점을 보완하기 위해서 "linked list"라는 자료구조가 고안되었다.
해당 자료구조는 각 요소들의 주소값을 이용하여 불연속적으로 존재하는 데이터를 서로 연결하는 형태로 구성되어 있다. - LinkedList에서의 데이터 추가, 삭제의 경우 참조하는 주소값에 대한 정보만 변경해 주면 되기 때문에 처리속도가 매우 빠르다.
- ArrayList의 경우 배열을 기반으로 구현되었기에 데이터가 메모리상에 연속적으로 존재하기 때문에 접근시간은 빠르다는 장점이 있다. 또한 순차적인 추가 및 삭제의 경우 LinkedList는 처음부터 n번째 까지 주소값을 따라간 후 처리하지만 ArrayList는 배열의 주소값 기준 마지막 데이터를 수정하면 되기 때문에 순차적인 추가/삭제의 경우 ArrayList의 처리속도가 더 빠르다.
- Iterator, Listiterator, Enumeration은 모두 컬렉션에 저장된 요소를 접근하는 데 사용되는 인터페이스이다.
- Comparator, Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다.
Comparable을 구현하고 있는 클래스들은 기본적으로 오름차순으로 정렬되도록 구현되어 있다. - HashSet은 Set인터페이스를 구현한 대표적은 컬렉션이며, 중복을 허용하지 않고 저장 순서를 유지하지 않는다.
- HashSet과 달리 저장순서를 유지하고 싶다면 LinkedHashSet을 사용해야 한다.
- Collections 클래스에서는 컬렉션과 관련된 다양한 메서드를 제공한다.
- 동기화
멀티 쓰레드 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 무결성을 유지하기 위해서는 공유되는 객체에 동기화가 필요하다.
Vector와 HashTable과 같은 JDK1.2 이전의 클래스들의 경우 자체적으로 동기화 처리가 되어있는데, 멀티 쓰레드 프로그래밍이 아닌 경우 성능을 떨어뜨린다.
JDK 1.2 이후 추가된 컬렉션은 자체적으로 동기화 기능을 사용하지 않고 필요시 사용할 수 있도록 Collection 클래스에서 동기화 메서드를 제공하고 있다. - 변경불가
멀티 쓰레드 프로그래밍에서 여러 쓰레드가 하나의 컬렉션을 공유하다 데이터가 손상될 수 있는데 변경불가 컬렉션을 생성하는 메서드를 사용하여 해당 문제를 방지할 수 있다. - 싱글톤
단 하나의 객체만을 저장하는 컬렉션을 만들어야 하는 경우 싱글톤메서드를 사용할 수 있다.
매개변수로 저장할 요소를 지정하면, 해당 요소를 저장하는 컬렉션을 반환한다. 그리고 반환된 컬렉션은 변경할 수 없다.
- 동기화
'독후감 > Java의 정석-기초편' 카테고리의 다른 글
Java의 정석 기초편 독후감 (14) - 람다와 스트림 (0) | 2025.03.16 |
---|---|
Java의 정석 기초편 독후감 (13) - 쓰레드 (0) | 2025.03.16 |
Java의 정석 기초편 독후감 (10) - 날짜와 시간&형식화 (0) | 2025.03.12 |
Java의 정석 기초편 독후감 (9) - java.lang 패키지와 유용한 클래스 (0) | 2025.03.10 |
Java의 정석 기초편 독후감 (8) - 예외처리 (0) | 2025.03.09 |