JCF는 Java Collection Framework의 약자로 “데이터 군을 저장하는 클래스들을 표준화한 설계”를 의미한다.
여기서 Framework는 표준화된 프로그래밍 방식을 의미한다.
JCF가 등장하게 된 배경은 다음과 같다. 기존의 배열은 선언과 동시에 배열의 크기가 초기화가 되고 이후에는 변경이 불가능해 동적으로 관리하는 것이 어려웠고
공통화된 처리 방법이 있지 않아 개발자 스스로가 자신만의 방법으로 데이터를 관리해야 했다. 이와 같은 불편함을 해소하고자 Collection이 등장하게 되었다.
기존에는 Vector, HashTable, Properties와 같은 컬렉션들을 서로 각각의 방식 대로 다수의 데이터를 관리했으나 JDK1.2부터 Collection Framework가 등장하면서 다양한 종류의 컬렉션이 추가가 되었고 모든 컬렉션 클래스를 표준화된 방식
으로 다룰 수 있게 구성되어 있다.
여기서 표준화된 방식
으로 다룰 수 있다라는 것은 인터페이스로 정의하여 컬렉션을 관리한다는 것을 의미한다. 인터페이스는 3가지로 List, Set, Map이 있다. 여기서 Map(Key Value)은 앞선 List와 set과는 다른 자료구조를 다루고 있어 따로 Collection을 상속받지 않는다.
위의 사진을 보면 Vector는 AbstractList를 상속(extends)받는 것을 볼 수 있다. 또한 List를 구현(implements)하고 있지만 원소를 추가하는 메소드는 add가 아닌 addElement이며 원소를 삭제하는 것 역시 remove가 아닌 removeElement인 것을 확인할 수 있다.
이제부터 JCF의 핵심 인터페이스를 알아보고자 한다 .먼저 List를 살펴보고자. List는 순서가 있는 데이터의 집합으로 데이터의 중복을 허용
한다. 구현할 수 있는 구현클래스로는 ArrayList, LinkedList, Stack등이 있다.
List는 Collection을 상속받을 것을 확인할 수 있고 add와 remove를 통해 자원을 넣고 제거하고를 할 수 있다.
Set은 중복을 허용하지 않고 저장순서가 유지되지 않는 데이터의 집합
이다. 구현클래스로는 HashSet, TreeSet등 이 있다.
set 역시 Collection을 상속받는 것을 확인할 수 있고 add와 remove를 통해 자원을 넣고 제거할 수 있다.
마지막으로는 Map에 대해 살펴보고자 한다. Map은 키(Key)와 값(Value)의 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용하는 데이터 집합
으로 구현 클래스로는 HashMap, ConcurrentHashMap 등이 있다..
Map은 앞서 말한 것과 같이 Collection을 상속받고 있지 않는다. 또한 값을 넣을 때는 put 메소드를 활용하면 데이터를 삭제할 때에는 remove를 사용한다.
JCF의 가장 큰 장점은 배열과 달리 동적으로 데이터를 관리할 수 있다는 것이다. 앞서 말한 것과 같이 배열은 초기화 시 크키가 고정되어 있어 동적으로 데이터를 관리하는 것이 불가능했지만 Collection의 경우에는 크키가 정해져 있지 않아 데이터를 늘렸다가 줄였다가를 편하게 수행할 수 있다.
두 번째 장점으로는 다형성이 적용된다는 것이다. List, Set, Map 모두가 인터페이스로 정의되어 있기에 언제든지 원하는 구현클래스로 변환할 수 있어 자바의 핵심인 다형성이 잘 보장된다.
마지막 장점으로는 다양한 자료구조를 직접 구현할 필요 없이 사용할 수 있다는 것
이다. Collection에는 stack, hashSet, HashMap등 다양한 자료구조들을 제공해주어 개발자로 하여금 코드르 새로 생성하는 것이 아닌 자료구조를 사용함으로 개발자로 하여금 반복되는 작업을 줄어들게 했다는 장점이 있다.