14_컬렉션(Collection)
* 컬렉션(Collection)
자료 구조가 내장되어 있는 클래스로 자바에서 제공하는 "자료 구조"를 담당하는 "프레임워크"
=> 자료 구조: 방대한 데이터들을 효율적 (구조적)으로 다를 때 필요한 개념
=> 프레임워크: 효율적인 기능들이 이미 정의되어 있는 틀
정리해 보면
데이터들이 새로이 추가되거나, 삭제가 되거나, 수정이 되는 기능 (알고리즘) 들이
이미 정의되어 있는 틀이 있음 == 컬렉션
=> 다량의 데이터들을 관리하고자 할 때 배열을 가지고 충분히 사용했었지만
그 배열의 단점들을 보완한 것이 "컬렉션"
*배열과 컬렉션의 차이점
- 배열의 단점
1. 배열을 쓰고자 할 때 먼저 크기를 지정해야 함
=> 한번 지정된 크기는 변경이 불가함
새로운 값을 추가하고자 할 때 크기가 오버될 경우 새로운 크기의 배열을 만들고 기존의 내용물을 복사해 주는 코드를 직접 짜야 함
2. 배열 중간 위치에 새로운 데이터를 추가하거나 삭제하는 경우
삭제 시 기존의 값들을 앞으로 땡겨 주거나, 추가 시 뒤로 한 칸씩 밀어 주는 코드를 직접 짜야 함
3. 한 타입의 데이터들만 저장 가능함
- 컬렉션의 장점
1. 크기에 제약이 없음
=> 크기 지저을 해 줄 필요도 없고, 만약 크기 지정을 하더라도 알아서 크기가 늘어나면서 새로운 데이터들이 추가됨
이미 메소드로 해당 기능들이 다 만들어져 있음! (호출만 잘해 주면 됨)
2. 중간에 값을 추가하거나 삭제하는 경우 값을 앞 또는 뒤로 당겨 주는 코드들이 이미 메소드에 다 정의되어 있음
3. 기본적으로 여러 타입의 데이터들을 저장할 수 있음
=> 단, 객체 형식으로만 저장 가능 (Wrapper 클래스 형태로 AutoBoxing 해서 쓰면 됨)
=> 또한 "제네릭" 설정을 통해서 한 타입의 데이터들만 담는 것도 가능
단지 방대한 데이터들을 담아만 두고 조회만 할 목적이라면 => 배열만 써도 무방
방대한 데이터들이 빈번하게 추가, 삭제, 수정될 것 같다면 -> 컬렉션을 쓰는 게 더 이득
배열(Array) | 컬렉션(Collection) |
같은 자료형의 값들을 여러 개 보관 |
다른 자료형의 값들을 여러 개 보관 ( == 종류를 따지지 않는 배열) |
문제점 | 장점 |
한 번 크기를 지정하면 변경할 수 없음 (공간 크기가 부족하면 에러 발생 => 할당 시 넉넉한 크기로 할당해야 하기 때문에 메모리 낭비) |
저장하는 크기의 제약이 없음 |
배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불가 (추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야 함 => 복잡한 알고리즘) |
추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결됨 |
한 타입의 데이터만 저장 가능 | 여러 타입의 데이터를 저장 가능 (단, 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우에는 Wrapper클래스를 사용해야 함) |
컬렉션: 데이터를 한 번에 모아서 저장
=> for문, if문 없이 간단하게 추가, 삭제, 정렬 등의 기능 처리 가능해짐
=> 자료 구조적 알고리즘을 구현할 필요가 없음
자료 구조: 방대한 데이터를 어떻게 잘 보관할지를 연구하는 학문
=> Java에서는 컬렉션이 자료 구조를 담당하는 프레임워크
(API는 프레임워크의 하위 호환 버전 정도임 / API도 필요한 자료를 제공해 주니까)
Collection(부모 클래스) => 인터페이스 |
Collection의 자식 클래스 아님!! | |
List (자식 클래스 1) | Set (자식 클래스 2) | Map |
컬렉션이라는 인터페이스를 가지고 와서 추상 필드, 추상 메소드를 함께 오버라이딩 할 것이므로 둘의 구조가 비슷할 것임을 예상 가능함 |
List, Set과 구조가 다를 것임을 예상 가능함 |
|
공을 복주머니에 넣어서 한 뭉텅이로 보관 | ||
순서를 유지하고 저장 | 순서를 유지하지 않고 저장 | 키와 값의 쌍으로 저장 |
중복 저장 가능 | 중복 저장 안 됨 | 키는 중복 저장 안 됨 |
단일값을 1방에 1개씩 |
키와 값은 친구친구! 1방에 2개 |
*컬렉션의 3가지 분류
- List계열: 담고자 하는 값(Value)만 저장 / 값 저장 시 순서가 유지됨 (index 개념 있음) / 중복값 허용
예) ArrayList, Vector, LinkedList => ArrayList가 가장 많이 쓰임
- Set 계열: 담고자 하는 값(Value)만 저장 / 값 저장 시 순서 유지 X (index 개념 없음) / 중복값 허용 X
예) HashSet, TreeSet
- Map 계열: 키(Key) + 담고자하는 값(Value) 세트로 저장 / 값 저장 시 순서 유지 X (index 개념 없음) / key의 중복값 허용 X, value는 중복값 허용
키: 값을 찾아가기 위한 식별 용도이므로 중복될 수 없음
예) HashMap, Properties