
- Java Collection Framework는 객체들을 관리하기 위해 사용하는 컨테이너 클래스들의 집합이다
- 컨테이너 클래스들의 종류는 크게 List, Set, Queue, Map 계열로 구분한다.
- 각 계열에 따라 객체들을 저장하고 관리하는 방식의 차이가 있다.
- 컬렉션 프레임워크 클래스들을 잘 활용하기 위해서는 각 클래스들의 특징과 저장방식에 대한 이해가 필요하다
- Collection interface: 순서없는 객체들의 집합
- List interface : 순차적 나열로 순서 지정이 가능한 객체들의 집합
- Set interface : 중복을 허용하지 않는 객체들의 집합
- Queue interface : FIFO 선입선출구조
- Map : 키와 vlaue 쌍으로 대응하는 객체들로 이루어진 집합
- 제네릭은 Java5에서 추가된 기능으로 특히 객체를 수집, 관리하는 컬렉션을 이용할때 반드시 사용한다.
- 제네릭을 사용하면 데이터를 저장하는 시점에 어떤 데이터를 저장할 것인지 명시할 수 있다
- 이를 통해 사용하고자 하는 데이터의 타입을 명확히 선언할 수 있고, 정확한 데이터의 사용여부를 컴파일 시점에 확인할 수 있다.
- Object 클래스는 최상위 클래스로서 Java의 모든 클래스를 참조할 수 있다.
- 모든 클래스를 참조할 수 있다는 것은 편리할 수 있지만 오류를 발생시킬 수 있는 여지가 크다
- 만약 Object 배열에 다양한 객체의 참조를 넣었을때, 객체의 구분없이 배열에 담을 수 있다는 것은 편리하지만 다시 꺼낼때는 문제가 발생한다.
데이터의 최소 단위는 객체. 컬렉션 프레임 워크의 클래스들은 객체를 저장하는 역할을 한다.
예를들어 int 타입의 정수들을 100개 모은다고 가정했을 때 primitive타입의 배열을 선언 할 수 있지만 자바 컬렉션 프레임워크의 클래스들은 사용할 수 없다.
왜냐하면 컬렉션 타입의 클래스들은 저장하는 대상이 객체 단위이기 때문에 primitive타입의 데이터들을 저장할 수 없다.
따라서 primitive 타입의 데이터들을 객체 형태로 변환해주는 클래스들인 Wrapper 클래스를 사용해야한다

java.util.Collection 인터페이스
- 컬렉션 프레임워크의 최상위 인터페이스이다
- 요소(객체)에 대한 삽입, 삭제, 탐색의 기능을 정의한다
- List 계열의 컬렉션은 저장 요소를 순차적으로 관리하며 중복된 값과 null값을 요소로 가질 수 있다
- 요소에 대한 접근은 배열과 마찬가지로 인덱스를 통해 접근한다
- 배열 자료구조 형태로 데이터를 저장할 때 저장 데이터의 특성에 따라 적절한 List 계열의 클래스들을 활용한다.
- List인터페이스를 구현한 대표클래스는 ArrayList, LinkedList, Vector클래스가 있다



- Set 인터페이스를 구현한 컬렉션 클래스들의 가장 큰 특징은 저장하는 요소들의 중복을 허용하지 않는다는 것이다
- 유일성을 보장
- 하나의 요소를 꺼내는 방법이 없음 꺼낸다면 전체의 요소를 순회하여 꺼내는 방식을 사용
- Set 인터페이스의 구현 클래스들은 equals() 메소드를 이용해 저장 요소의 중복을 검사한다
- Set 인터페이스가 정의하고 있는 추상 메소드 중에는 단일 요소를 꺼내기 위한 get() 메소드가 존재하지 않는다
- Set 인터페이스를 구현한 주요 클래스는 HashSet, LinkedHashSet, TreeSet 등이 있다
- Map 인터페이스가 갖는 대표적인 특성은 요소를 저장하기 위해서는 유일한 Key와 함께 저장해야 한다
- List, Set, Queue와 달리 Map 인터페이스는 Collection 인터페이스를 상속하지 않는다
- 저장형태가 다르기 때문 (ket, value)
- Map 인터페이스는 내부에 Entry 인터페이스를 가지고 있으며 Entry는 키와 값을 가진 객체의 순서 쌍이다.
- Map인터페이스의 주요 구현 클래스는 HashMap, LinkedHashMap, TreeMap 등이 있다.

참고자료
https://pridiot.tistory.com/63
https://www.youtube.com/watch?v=nWeWIH7TFXA&t=646