본문 바로가기

자바/자바 개념

[Java] 제네릭과 컬렉션의 개념 / 2021.12.29

* 참고 자료 : 명품 자바 프로그래밍

 

1. 컬렉션

1-1. 컬렉션의 개념

컬렉션은 안드로이드를 비롯한 자바 프로그램을 작성하는데 빼놓을 수 없는 중요한 도구이다. 자바의 JDK는 소위 자료 구조 과목에서 배운 많은 자료 구조들을 컬렉션으로 만들어 제공한다. 또한 컬렉션은 제네릭이라는 기법으로 구현되어 있기 때문에 컬렉션을 공부하기 위해서는 제네릭에 대한 공부도 필요하다.

배열과 컬렉션의 개념 차이?
배열은 고정 크기 이상의 객체를 관리할 수 없으며 배열의 중간에 객체가 삭제되면 응용 프로그램에서 자리를 옮겨야한다. 반면에, 컬렉션은 배열의 가진 고정 크기의 단점을 극복하기 위해 객체들을 쉽게 삽입, 삭제, 검색할 수 있는 가변 크기의 컨테이너이다. 가변 크기이므로 객체의 개수를 염려할 필요가 없으며 컬렉션 내의 한 객체가 삭제되면 컬렉션이 자동으로 자리를 옮겨준다.

 

1-2. 컬렉션을 위한 자바 인터페이스와 클래스

 

컬렉션 인터페이스와 클래스

 

컬렉션 클래스는 개발자가 바로 사용할 수 있는 것들로서, Vector<E>와 ArrayList<E>는 가변 크기의 배열을 구현하며, LinkedList<E>는 노드들이 링크로 연결되는 리스트를 구현한다. Stack<E>는 스택을 구현하며, HashSet<E>은 집합을 구현한다. 이들은 모두 Collection<E>를 상속받고, 단일 클래스의 객체만을 요소로 다루는 공통점이 있다. 

이와 달리 HashMap<K, V>는 키(K)와 값(V)의 쌍으로 이루어지는 데이터를 저장하고, 키로 쉽게 검색하도록 만든 컬렉션이다.

 

1-3. 컬렉션의 특징

1) 컬렉션은 제네릭이라는 기법으로 만들어져 있다. 컬렉션 클래스의 이름에는 <E>, <K>, <V> 등이 항상 포함된다. 이들은 '타입 매개변수'라고 하며, Vector<E>에서 E 대신 Integer와 같이 구체적인 타입을 지정하면 Vector<Integer>는 정수 값만 저장하는 벡터로, Vector<String>은 문자열만 저장하는 벡터로 사용할 수 있다. 특정 타입만 다루지 않고 여러 종류의 타입으로 변신할 수 있도록, 컬렉션을 일반화시키기 위해 <E>를 사용하는 것이다. 그러므로 E를 일반화시킨 타입 혹은 제네릭 타입이라고 부른다. 컬렉션은 여러 타입의 값을 다룰 수 있도록 변신이 가능한 자료 구조이지만, 컬렉션을 사용할 때는 지정된 특정 타입의 값만 저장 가능하다.

2) 컬렉션의 요소는 객체들만 가능하다. int, char, double등의 기본 타입의 데이터는 원칙적으로 컬렉션의 요소로 불가능하다.

2. 제네릭

2-1. 제네릭의 기본 개념

제네릭은 모든 종류의 타입을 다룰 수 있도록, 클래스나 메소드를 타입 매개변수를 이용하여 선언하는 기법이다. 자바의 제네릭은 클래스 코드를 찍어내듯이 생산할 수 있도록 일반화시키는 도구이다. 

 

2-2. 제네릭 타입 매개변수

컬렉션 클래스에서 타입 매개변수로 사용하는 문자는 다른 변수와 혼동을 피하기 위해 일반적으로 하나의 대문자를 사용한다. 

E : Element를 의미하며 컬렉션에서 요소임을 나타냄
T : Type을 의미
V : Value를 의미
K : Key를 의미

'자바 > 자바 개념' 카테고리의 다른 글

[Java] Iterator<E> / 2021.12.31  (0) 2021.12.31
[Java] Vector<E> / 2021.12.29  (0) 2021.12.29
[Java] String 클래스 / 2021.11.21  (0) 2021.11.21
[Java] Wrapper 클래스 / 2021.11.17  (0) 2021.11.17
[Java] Object 클래스 / 2021.11.17  (0) 2021.11.17