📗 self-study/📗 KH정보교육원 당산지원

[Java] 14_컬렉션(Collection)의 개요

천재강쥐 2022. 8. 19. 10:08

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