
자료구조는 Data Structure로 데이터 구조 더 자세히 설명하면 '일련의 일정 타입들의 데이터 모임 또는 관계를 나타낸 구성체'라고 말할 수 있다.
자료구조와 알고리즘은 서로 뗄 수 없는 상호 의존적인 관계효율적인 알고리즘을 선택할 수 있다는 장점데이터 삽입 (insert/add), 삭제 (remove/delete)가 빈번하게 발생하면 LinkedList, 아닐 경우 ArrayList를 쓰듯이 각 자료구조별로 장단점이 존재. 따라서 알고리즘 선택에 있어 매우 중요한 역할을 담당Collection을 배워보는 시간선형 자료구조 (Linear Data Structure)
= 데이터가 일렬로 연결된 형태. 흔히 쓰는 int[] 배열과 같다.
리스트(List), 큐(Queue), 덱(Deque) 이 있음.비선형 자료구조 (Nonlinear Data Structure)
= 데이터가 일렬로 나열된 것이 아닌, 각 요소가 여러 개의 요소와 연결 된 형태. 쉽게 말해서 거미줄 같다고 보면 된다.
그래프(Graph)와 트리(Tree)집합 (Set)
= 자료구조 중 위 두 가지 분류에 해당되지 않는 자료구조이다. 데이터가 연결된 형식이 아니다.
Java Collections FrameWork
기본 구조라고 한다면 딱 떠올려야 할 것이 바로 Interface(인터페이스)이다.
인터페이스 자체가 기본 뼈대(추상 구조)만 있음. 이렇듯 실제로 자바에서 제공하는 Collection은 크게 3가지 구조로 나뉨.
List(리스트), Queue(큐), Set(집합) -> 형태에 따른 자료구조라고 보면 된다

인터페이스 (하늘색 박스)
인터페이스는 메서드의 구현 없이 메서드의 형태만 정의한 것임. 인터페이스는 이를 구현하는 클래스가 반드시 해당 메서드를 구현하도록 강제한다.
클래스 (초록색 박스)
실제로 구현된 클래스임. ArrayList, LinkedList, HashSet 등은 해당 인터페이스를 구현하고, 구체적인 동작을 정의한 클래스들입니다. 이들은 인터페이스가 정의한 메서드들을 실제로 구현한다.
List Interface 는 대표적인 선형 구조 = 주로 순서가 있는 데이터를 목록으로 이용할 수 있음
List를 통해 구현된 클래스들은 동적 크기를 갖으며 배열처럼 사용할 수 있음.
(일반 배열에서 int[] array = new int[10] -> 10개의 공간 외에는 IndexOutofBoundsException 에러 발생 )
List를 통해 구현된 클래스 => 배열의 기능 + 동적 크기
List Interface를 구현하는 클래스

ArrayList
Object[] 배열을 사용하면서 내부 구현을 통해 동적으로 관리탁원한 성능삽입, 삭제에는 비효율적인 모습을 보임LinkedList
데이터와 주소로 이루어진 클래스를 만들어 서로 연결하는 방식Node(노드) 라고 함성능 상승Stack