[Java] 컬렉션과 제네릭
2021. 12. 10. 20:27ㆍLanguage`/Java
배열 vs 컬렉션
배열
- 고정 크기
- 배열의 중간에 삽입/삭제가 이루어지면 데이터들이 이동해야 한다
컬렉션
- 가변 크기
- 컬렉션 내에서 삽입/삭제가 이루어지면 컬렉션이 자동으로 데이터들을 이동시킨다
- '제네릭'이라는 기법으로 구현
- Vertor<E>, ArrayList<E> : 가변 크기의 배열 구현
- LinkedList<E> : 노드들이 링크로 연결되는 리스트 구현
- Stack<E> : 스택 구현
- HashSet<E> : 집합 구현
- 모두 Collection<E>를 상속받음
- 단일 클래스의 객체만을 요소로 다룬다
컬렉션 특징
1. '제네릭'이라는 기법으로 구현
- 컬렉션 클래스의 이름에 <E>, <K>, <V> 등(타입 매개변수) 이 항상 포함
- 컬렉션을 여러 종류의 타입으로 변신할 수 있도록(일반화) 타입 매개변수를 사용
- 컬렉션을 사용할 때는 지정된 특정 타입의 값만 저장 가능
2. 컬렉션의 요소는 객체들만 가능
- int, char, double등 기본 타입의 데이터는 요소로 불가능
- Wrapper 클래스 타입만 가능 (Integer, Double, Character 등)
Vector<int> v = new Vector<int>(); // 컴파일 오류 : int는 사용 불가
Vector<Integer> v = new Vector<Integer>(); // 정상 코드
제네릭
- 모든 종류의 타입을 다룰 수 있도록, 클래스/메소드를 타입 매개변수를 이용하여 선언하는 기법
- 클래스 코드를 '일반화'시키는 도구
class Stack<E>{
...
void push(E item){...}
E pop(){...}
...
}
- <E>에 구체적인 타입을 지정하면, 지정된 타입만 다룰 수 있는 구체화된 스택
- <E> : Integer -> Integer 타입만 다루는 스택
- <E> : Point -> Point 타입의 객체만 다루는 스택
제네릭 타입 매개변수
- <E> : Element
- <T> : Type
- <V> : Value
- <K> : Key