본문 바로가기

Dot Programming/Java

자바컬렉션프레임워크(JCF)로 자료구조 알아보기

    핵심 자료구조 (Array, List, Map)

    배열(Array)

    배열은 가장 전통적이고 기본이 되는 자료구조이다. 데이터를 순차적으로 저장해 0부터 시작하는 인덱스를 통해 접근한다.

    Array 특징

    • 일반적으로 배열은 선언할때 크기 고정
    • 데이터를 임의 접근할 수 있어 탐색을 효율적으로 할 수 있음
    • 배열에 들어가는 데이터는 모두 동일한 자료형 이어야 함
    • 배열 중간에 값을 추가하려면 기존 데이터를 모두 이동시켜야 함

     

    리스트(List)

    배열과 유사한 순차적인 자료구조를 제공한다. 데이터 접근을 위해 인덱스를 사용해야 하는 점은 배열과 같지만 배열의 모든 단점을 커버한다.

    List 특징

    • 데이터 크기가 고정되지 않음
    • 데이터를 다루기 위한 여러 방법이 제공됨
    • 리스트의 데이터는 서로 다른 타입일 수 있음 -> 일관된 처리가 어려워 보통은 동일하게 처리함
    • 배열 중간에 값을 추가하거나 삭제하기 쉬움
    • 특정 데이터가 포함되어 있는지 확인은 가능하나 검색을 위해서는 별도 구현이 필요

     

    맵(Map)

    데이터를 Key:Value(키:값)의 쌍으로 저장하는 방식이다. 실제 데이터가 저장되는 형태는 내부구조에 따르며 사용하는 쪽에서는 내부구조에 대해 신경쓸 필요가 없는 형태이다. 맵을 사용했을때 얻을 수 있는 가장 큰 장점은 원하는 데이터를 손쉽게 찾을 수 있다는 점이다.

    Map 특징

    • 데이터를 저장할 때 해당 데이터를 찾기 위한 Key를 부여
    • Key값을 알면 언제든 쉽게 데이터를 찾을 수 있음
    • Value 에 객체형이 들어갈 수 있어 복잡한 데이터 처리가 가능

     

    자바 컬렉션 프레임워크(JCF)

    JAVA에서는 다양한 자료구조가 JCF (Java Collection Framework)라는 프레임워크로 제공된다. 컬렉션 프레임워크는 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻한다. 

     

    JCF는 Collection, Map, List, Set 인터페이스를 중심으로 다음과 같은 클래스 계층구조를 형성하여 이를 통해 기본 자료구조 클래스들이 구성되어있다.

    JCF 계층구조

     

    JCF 핵심 인터페이스 비교

    인터페이스 설명 특징 대표 구현 클래스
    List 순서가 있는 데이터의 집합. 데이터의 중복을 허용 ArrayList, LinkedList, Stack
    Set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않음 HashSet, LinkedHashSet, TreeSet
    Map 키(key)와 값(value)의 쌍으로 이루어진 데이터 집합. 순서 유지 X, 키 중복 X, 값 중복 O HashMap, TreeMap, LinkedHashMap, Properties

    ☛ LinkedList는 현재 데이터에 다음 데이터를 읽을 수 있는 정보를 추가한 것으로 불연속적으로 존재하는 데이터를 서로 연결할 수 있는 방법을 제공한다.

     

     Double LinkedList는 이전과 다음 데이터 정보를 모두 가지고 있는 형태이며 자바의 경우 LinkedList 클래스가 제공되는데 실제로는 Double Circular LinkedList(순환구조가 추가된 Double Linked List) 형태를 구현해 둔 것이다.

     

     

    컬렉션 객체 생성 방법

    모든 컬렉션 클래스들은 java.util 패키지에 들어있다. 컬렉션 객체를 생성하는 방법은 참조변수 선언시 상위 인터페이스 타입을 사용하고 객체 생성은 필요에 따라 구체적인 클래스들을 사용하는 형식이다.

    ArrayList<String> list = new ArrayList<>(); // 권장안됨 
    List<String> list = new ArrayList<>(); // 권장됨

     

    컬렉션 클래스 정리

    컬렉션 특징
    ArrayList 배열기반, 데이터의 추가와 삭제에 불리, 순차적인 추가삭제는 제일 빠름. 임의의 요소에 대한 접근성(accessibility)이 뛰어남.
    LinkedList 연결기반. 데이터의 추가와 삭제에 유리. 임이의 요소에 대한 접근성이 좋지 않다.
    HashMap 배열과 연결이 결합된 형태. 추가, 삭제, 검색, 접근성이 모두 뛰어남. 검색에는 최고성능을 보인다.
    TreeMap 연결기반. 정렬과 검색(특히 범위검색)에 적합. 검색성능은 HashMap보다 떨어짐.
    Stack Vector를 상속받아 구현
    Queue LinkedList가 Queue 인터페이스를 구현
    Properties Hashtable을 상속받아 구현
    HashSet HashMap을 이용해서 구현
    TreeSet TreeMap을 이용해서 구현
    LinkedHashMap
    LinkedHashSet
    HashMap과 HashSet에 저장순서유지기능을 추가

     


    참고

    자바의 정석 3rd Edition