컬렉션(Collection) 프레임워크(Framework)의 개념과 구조
컬렉션(Collection)
-
동일한 타입을 묶어 관리하는 자료구조
배열과의 차이점?
[배열의 특징 2가지]
-동일한 타입만 묶어서 저장 가능
-생성시 크기를 지정하여야 하며 추후 변경 불가(컬렉션과의 차이점)
-
저장 용량을 동적으로 관리
프레임워크(Framework)
클래스 또는 인터페이스를 생성하는 과정에서 설계의 원칙 또는 구조에 따라 클래스 또는 인터페이스를 설계하고, 이렇게 설계된 클래스와 인터페이스를 묶어 놓은 개념.
- 클래스와 인터페이스의 모임(라이브러리)
- 클래스의 정의에 설계 원칙 또는 구조가 존재
컬렉션 프레임워크
- 리스트, 스택, 큐, 트리 등의 자료구조에 정렬, 탐색 등의 알고리즘을 구조화해놓은 프레임워크
선형 자료 구조
리스트(List)
- 순서가 있는 저장 공간
- 하나의 자료가 다른 자료를 가리키며 자료들을 축적해 나가는 구조
- 개수가 정해져 있지 않은 자료들을 다룰 때에 유용
- 배열에 비해 불필요한 빈 공간을 낭비하지 않음
- 단, 인덱스(index)가 없어, 접근 시 배열과 달리 한 번에 찾기가 어려움
- 주로 순서가 있는 데이터를 목록으로 이용할 수 있도록 만들어진 인터페이스
배열: 저장공간 크기 고정
리스트: 저장공간 크기 동적변환
List<E> 컬렉션의 객체 생성
방법1. List<E> interface의 구현 클래스 생성자로 동적컬렉션 생성 -> 데이터의 추가 삭제 가능
List<제네릭타입지정> aList1 = new ArrayList<제네릭타입지정>();
List<제네릭타입지정> aList2 = new Vector<제네릭타입지정>();
List<제네릭타입지정> aList3 = new LinkedList<제네릭타입지정>();
ArrayList <제네릭타입지정> aList1 = new ArrayList<제네릭타입지정>();
Vector <제네릭타입지정> aList2 = new ArrayList<제네릭타입지정>();
LinkedList <제네릭타입지정> aList3 = new ArrayList<제네릭타입지정>();
-
기본 생성자의 경우 원소 10개를 저장할 수 있는 저장공간(capacity) 확보
-
단, 저장공간은 메모리 공간만을 의미하며 컬렉션의 크기(size())와는 무관함.
-
추후 원소가 많아지면 저장공간을 자동 추가
-
생성자 매개변수로 저장공간의 크기를 직접 넘겨줄 수 있음 (단, LinkedList<E>는 제외.)
-
배열처럼 수집(collect)한 원소(Element)를 인덱스(index)로 관리
List<E>의 주요 메서드: add(추가), set(변경), remove(삭제), get, size, isEmpty, toArray
방법2. Arrays.asList(T ...) 메서드를 이용하여 정적컬렉션 생성 ->
1. LinkedList
- 데이터(item)와 주소로 이루어진 클래스를 만들어 서로 연결하는 방식
- 양방향 포인터 구조로 데이터의 삽입(insert/add), 삭제(remove/delete)가 빈번할 경우 빠른 성능을 보장
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도
2. Stack
- LIFO(Last In First Out Out), 후입선출 형식을 갖는 구조
- 스택 자료 구조
3. Vector
- 동시 접속 고려
- ArrayList와 동일한 내부구조로 동일하게 사용 가능
- ArrayList의 이전 버전이며, 모든 메소드가 동기화됨
- Vector 내부에 값이 추가될 때 자동으로 크기가 조절되고 객체들은 한자리씩 뒤로 이동함.
- 하나의 스레드가 실행완료되어야 다른 스레드들이 실행된다.
4. ArrayList
- 동기화 보장하지 않음
- 객체 내부에 있는 배열에 데이터를 저장
- 상당히 빠르고 크기를 맘대로 조절할 수 있는 배열
- 단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점
- 동시 접속 대신 빠른 속도가 장점.
- java.util 패키지에 소속.
- 표준 배열보다는 느리지만 배열에서 많은 조작이 필요한 경우에 사용함
- List 인터페이스에서 상속받아 사용
- 객체가 추가되어 용량을 초과하면 자동으로 부족한 크기만큼 용량이 늘어남.
큐(Queue)
- FIFO(First In First Out) 형식을 갖는 구조
- 프린터기와 같이 먼저 들어온 자료에 대한 수행이 이루어짐
비선형 자료 구조
트리
- 하나 이상의 Node(노드)로 이루어진 유한 집합
- 자료를 저장하면서 다른 노드로 뻗어 나가는 나뭇가지 구조
- 파일 구조와 같이 자료와 자료 사이의 종속 관계를 나타낼 때에 사용
기타 자료 구조
집합