컬렉션 프레임워크
제네릭(Generic) 프로그래밍이란?
- 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환 될 수 있도록 프로그래밍 하는 방식
- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식
자료형 매개변수 T
- 여러 참조 자료형으로 대체 될 수 있는 부분을 하나의 문자로 표현
public class GenericPrinter<T> {
private T material;
public void set Material(T material) {
this.material = material;
}
public T getMaterial() {
return material;
}
}
type의 의미로 T 사용
자료형 매개 변수가 두 개 이상일 때
public class Point<T, V> {
T x;
V y;
Point(T x, V y) {
this.x = x;
this.y = y;
}
public T getX() {
return x;
}
public V getY() {
return y;
}
}
- 위 와 같이 자료형이 2가지 일 경우 <T, V> 로 사용 가능하다.
제너릭 메서드
- 메스드의 매개 변수를 자료형 매개 변수로 사용하는 메서드
pubilc class GenericMethod {
public static <T,V> double makeRectangle(Point<T, V> p1, Point<T, V> p2) {
double left = ((Number)p1.getX()).doubleValue();
double right = ((Number)p2.getX()).doubleValue();
double top = ((Number)p1.getY()).doubleValue();
double bottom = ((Number)p2.getY()).doubleValue();
double width = right - left;
dobule height = bottom - top;
return width * height;
}
}
- 메서드 내에서의 자료형 매개 변수는 메서드 내에서만 유효함
컬렉션 프레임 워크란?
- 프로그램 구현에 필요한 자료구조와 알고리즘을 구현해 놓은 라이브러리
- java.util 패키지에 구현되어 있음
- 개발에 소요되는 시간을 절약하고 최적화된 라이브러리를 사용할 수 있음
- Coleection 인터페이스와 Map 인터페이스로 구성됨
Collection 인터페이스
- 하나의 객체의 관리를 위해 선언된 인터페이스로 필요한 기본 메서드가 선언되어 있음
- 하위에 List,Set 인터페이스가 있음

- List 인터페이스
- 순서가 있는 자료관리, 중복허용
- ArrayList, Vector, LinkedList, Stack, Queue
- Set 인터페이스
- 순서가 정해져 있지 않음, 중복을 허용하지 않음
- HashSet, TreeSet 등
List 인터페이스
- Coleection 하위 인터페이스
- 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스
- 배열의 기능을 구현하기 위한 메서드가 선언됨
- ArrayList, Vector, LinkedList
ArrayList 와 Vector
- 객체 배열 클래스
- Vector는 자바 2 부터 제공된 클래스
- 일반적으로 ArrayList를 더 많이 사용
- Vector는 멀티 쓰레드 프로그램에서 동기화를 지원
- capacity 와 size 는 다른 의미임
ArrayList 와 LinkedList
- 둘다 자료의 순차적 구조를 구현한 클래스
- ArrayList는 배열을 구현한 클래스로 논리적인 순서와 물리적 순서가 동일 함
- LinkedList는 논리적으로 순차적인 구조지만, 물리적으로는 순차적이지 않을 수 있음
Stack
- Last In First Out(LIFO): 맨 마지막에 추가 된 요소가 가장 먼저 꺼내지는 자료구조
- 자바에서는 이미 구현된 클래스가 제공 됨
Queue
- First In First Out(FIFO): 먼저 저장된 자료가 먼저 꺼내지는 자료구조
- 선착순, 대기열등을 구현할 때 가장 많이 사용되는 자료 구조
- 자바에서는 이미 구현된 클래스가 제공 됨
Set 인터페이스
- Collection 하위의 인터페이스
- 중복을 허용하지 않음
- List는 순서기반의 인터페이스지만, Set은 순서가 없음
- get(i) 메서드가 제공되지 않음 (Itrator로 순회)
- 저장된 순서와 출력순서는 다를 수 있음
- 아이디, 주문빈호, 사번 등 유일한 값이나 객체를 관리할 때 사용
- HashSet, TreeSet 클래스
Iterator 로 순회하기
- Collection 의 개체를 순회하는 인터페이스
- iterator() 메서드 호출
Iterator ir = list.iterator();
while(ir.hasNext()) {
Integer num = ir.next();
...
}
HashSet 클래스
- Set 인터페이스를 구현한 클래스
- 중복을 허용하지 않으므로 저장되는 객체의 동일함 여부를 알기 위해 equals()와 hashCode() 메서드를 재정의 해야함
TreeSet 클래스
- 객체의 정렬에 사용되는 클래스
- 중복을 허용하지 않으면서 오름차순이나 내림차순으로 객체를 정렬 함
- 내부적으로 이진 검색 트리로 구현되어 있음
- 이진 검색 트리에 자료가 저장 될 때 비교하여 저장될 위치를 정함
- 객체 비교를 위해 Comparable이나 Comparator 인터페이스를 구현 해야 함
Comparable 인터페이스와 Comparator 인터페이스
- 정렬 대상이 되는 클래스가 구현해야 하는 인터페이스
- Comparable 은 compareTo() 메서드를 구현
매개 변수와 객체 자신(this)를 비교
- Comparator는 compare() 메서드를 구현
두개의 매개 변수를 비교
TreeSet 생성자에 Comparator가 구현된 객체를 매개변수로 전달
TreeSet<Member> treeSet = new TreeSet<Member>(new Member());
- 일반적으로 Comparable을 더 많이 사용
- 이미 Comparable이 구현된 경우 Comparator를 이용하여 다른 정렬 방식을 정의 할 수 있음
Map 인터페이스
- 쌍으로 이루어진 객체를 관리하는데 필요한 여러 메서드가 선언되어 있음
- Map을 사용하는 객체는 key-value 쌍으로 되어 있고 key는 중복될 수 없음
- 검색을 위한 자료구조
- key를 애용하여 값을 저장하거나 검색, 삭제 할때 사용하면 편리함
- 내부적으로 hash방식으로 구현 됨
index = hash(key); // index는 저장 위치

HashMap 클래스
- Map 인터페이스를 구현한 클래스 중 가장 일반적으로 사용하는 클래스
- HashTable 클래스는 자바2 부터 제공된 클래스로 Vector 처럼 동기화를 제공 함
- pair 자료를 쉽고 빠르게 관리할 수 있음
TreeMap 클래스
- key 객체를 정렬하여 key-value를 pair로 관리하는 클래스
- key 에 사용되는 클래스에 Comparable,Comparator 인터페이스를 구현
- java에 많은 클래스들은 이미 Comparable이 구현되어 있음
- 구현 된 클래스를 key로 사용하는 경우는 구현할 필요 없음