티스토리 뷰

반응형


 Java의 Collection Framework는 프로그램의 개발에 있어, 유용하게 쓰일 자료구조를 정의해놓은 것이다. 이를 통해 모든 객체타입을 구성요소로 하여 데이터 저장 방식을 손쉽게 활용할 수 있다. 단, Primitive Type(기본형)의 경우, 구성요소가 될 수 없음에 유의하자.

※ 참고: [IT 기술면접 준비자료] JAVA의 Wrapper Class와 AutoBoxing



1. 컬렉션 프레임워크의 인터페이스 구조

 왠 인터페이스!? 라고 생각하는 사람도 있겠다. 사실 컬렉션 프레임워크의 구성요소들은 '미리 정의된 클래스'이다. 그리고 이들을 계층화 (묶어주는)해주는 인터페이스가 존재한다.



▶ 컬렉션 프레임워크의 인터페이스 구



위 그림은 컬렉션 프레임워크의 인터페이스만 나타낸 그림이다. 즉, 모든 컬렉션 프레임워크에서 구현된 클래스는 Collection 혹은 Map을 구현했다는 것을 의미한다. Collection은 Set과 List라는 인터페이스로 나뉘는데, 그 특징은 다음과 같다.


Set: 중복 요소가 없는 오브젝트 저장 방식이다.


List: 중복은 허용하지만 저장순서가 있는 오브젝트 저장 방식이다.


Map: Key- Value로 나타내는 오브젝트 저장 방식이다.



2. 컬렉션 프레임워크의 클래스 소개

 위에서 인터페이스를 살펴봤으니, 이제 이들을 구현한 클래스를 살펴볼 차례이다. 먼저, Set 인터페이스를 구현한 클래스는 HashSet, TreeSet, LinkedHashSet이며, 특징은 다음과 같다.


HashSet: Hash알고리즘으로 Set을 구현한 클래스


TreeSet: Tree 알고리즘으로 Set을 구현한 클래스


LinkedHashSet: 순서를 보장하는 Set.


 Hash알고리즘은 검색속도를 향상시키는 알고리즘이다. 자료구조학을 공부하다보면 무조건 한 번은 봤을 것이다. (※참고: [IT기술면접 준비자료] 해시(Hash)와 해시충돌(Hash Collision)) 그리고 Tree를 활용하여 데이터의 삽입, 탐색을 수행하는 Set이 TreeSet인데, 그 중에서도 이진트리(Binary Tree)를 활용한다. 


  HashSet과 TreeSet은 순서를 보장하지 않는다는 공통점이 있다. (순서를 보장하고 싶다면 LinkedHashSet을 써야함.) 하지만 Hash알고리즘과 이진트리를 사용한다는 차이가 있다. HashSet의 경우 검색(특정 키를 찾아내는 것)이 TreeSet보다 빠르다.(해싱이 이진검색보다 빠르니까.) 하지만 TreeSet은 데이터를 정렬하여 저장하므로, 정렬을 활용한 연산에서 HashSet보다 유리하다. (A보다 큰 데이터 모두 추출하기, 문자열 자동완성 등) 



다음으로 List를 구현한 클래스를 알아보겠다. ArrayList와 LinkedList가 있다.


ArrayList: 배열을 기반으로 하는 List이다.


LinkedList: LinkedList구조를 기반으로 하는 List이다.



 ArrayList와 LinkedList는 저장 순서를 저장한다는 측면만 일치하는 것이 아니고, 실제로 사용하는 방법과 그 결과에도 큰 차이가 없다. 눈에 보이는 차이는 없지만 이 둘은 태생부터 결정적인 차이가 있는데, 바로 Array와 LinkedList이다. (ArrayList와 Array는 메모리에 저장되는 방식이 완전 일치하지는 않음에 유의한다. 그래도 LinkedList보다는 Array와 훨씬 닮아있다.)


 Array는 미리 데이터의 색인(Index)를 지정하여 저장하는 특성이 있어, 랜덤엑세스 성능이 뛰어나다. 하지만 데이터를 새로 저장하거나 삭제할 때는 색인을 모두 수정해야하므로 불리하다. 반대로 LinkedList는 데이터를 검색할 때는 head에서부터 차례로 노드를 찾아다니는 비효율이 있지만, 데이터를 새로 저장하거나 삭제할 때는 다음 노드를 가리키는 포인터만 변경해야하므로 효율적이다.


 마지막으로 Map을 구현한 클래스를 알아보겠다. HashMap, TreeMap, LinkedHashMap이 있다.



HashMap: Hash알고리즘으로 Map을 구현한 클래스


TreeMap: Tree알고리즘(Red-Black Tree)으로 Map을 구현한 클래스


LinkedHashMap: 저장 순서를 구분하는 Map. Key의 최초 등록 순서를 기준으로 한다.



 Key-Value구조를 갖는다는 점을 빼면, Set을 구현한 클래스들과 유사하다고 할 수 있다. 하지만 Key- Value구조를 가지므로, Key의 중복을 불허할 뿐, 하나의 Key에 여러 개의 Value를 저장할 수 있다. 또한 같은 Value이더라도, Key가 다르면 저장이 가능하다. 






-끝-




«   2022/06   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함
Total
809,655
Today
26
Yesterday
129