ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바기초] 컬렉션 프레임워크의 종류 (3가지), 제네릭 정리노트
    º Language º/Java 2023. 3. 29. 22:51

     

    자료형이 같은 기억 장소의 모임은 무엇일까요?

     

    정답은 "배열"입니다.

     

    배열은 빠르게 자료를 읽을 수 있습니다.

    그러나 치명적인 단점이 있는데..

    1. 자료형이 항상 같아야 하고,

    2. 크기가 고정되어있어 부족한 경우 새로 생성하여 요소를 다시 붙여 넣고,

    3. 새롭게 만든 경우 참조 변수를 재확인해야합니다.

    배열의 크기를 처음부터 크게 하자니 채워지지 않는 메모리가 낭비될 수가 있습니다.

     

    이러한 단점을 보완하기 위해, 자바에서는 '컬렉션 프레임워크'를 제공하였습니다.

     

     

     

    * 컬렉션 프레임 워크의 종류 (3가지)

     

    - 컬렉션 프레임 워크에는 List, Set, Map 3가지의 종류가 있습니다.

     

    * List 

     

    - List는  중복되는 데이터들을 허용합니다. 

    - 인덱스로 접근하게 됩니다.


    1.  ArrayList 

    - 중복을 허용하고, 출력 순서를 유지합니다.

    - 여러가지 자료형(String, int, new객체)을 모두 호출문에 담고 한번에 출력할 수 있습니다.

    (그러나, 많은 호출문 중 한가지만 출력하고자 할 때 해당 타입으로 형변환해야하기에 보통은 이렇게 사용하지 않습니다)
    - String처럼 추가되는 데이터가 있으면 새로 메모리를 잡기 때문에 시간이 오래걸립니다.

     

     


    2. LinkedList

    - 중복을 허용하고, 출력 순서를 유지합니다.

    - 데이터가 꼬리처럼 붙었다 떨어졌다가 하기에 수정이 용이합니다.
    - 데이터의 중간에 추가 삭제가 빈번할 때에는 LinkedList가 더 성능이 좋습니다.

     

     

     

    * Set

     

    - Set은 boolean으로 중복을 체크하여 중복된 값은 출력하지 않습니다.

    - 인덱스로 접근하게 됩니다.

     

     

     

    1. HashSet: 출력시에 순서를 유지하지 않습니다

    2. LinkedHashSet: 출력시에 순서를 유지합니다.

    3. TreeSet: 데이터를 정렬해 줍니다 (ex)1,2,3...순서대로

     < 굳이 데이터를 정렬할 필요 없으면 쓰지말기.. 데이터가 올때마다 정렬하기에 느려집니다. >
     

     

    - Set은 집합으로 생각하면 편합니다. Key 집합 속의 value들이 있는 것입니다.

     그렇기에 한 집합 속의 중복은 허용되지 않고, 순서유지가 되지 않는 것입니다.

     


    - 데이터 수를 알려주는 메소드 : .size()
    ex) System.out.println("데이터 수 : "+ set 객체 참조변수.size());

     

     

     

     

    * Map

     

     List나 Set의 경우 인덱스로 읽기에 주소가 1번째 인덱스에 있는지 2번째 인덱스에 있는지 기억하고 있기가 어려워요.
     이런 데이터를 저장해야한다면 map을 이용하면 좋아요, map은 인덱스 대신 key에 의해 데이터에 접근하는 방식입니다. 

     

    - 인덱스가 아닌 key, value 가 한 쌍으로 이루어진 자료구조입니다.

     
    1. HashMap :  hashMap은 출력시에 순서를 유지하지 않습니다.
    2. LinkedHashMap : 출력시에 순서를 유지합니다.
    3. TreeMap : TreeMap은 key를 기준으로 '정렬'해줍니다.

     

     

     

    * 제네릭(Generic)

     

    - 컬렉션 프레임 워크는 배열의 단점을 보완하여 자료형이 달라도 되고, 동적으로 크기가 조절됩니다.

     

    처음 컬렉션 프레임워크가 만들어졌을 때에는 배열에 자료형이 다른것을 마구 담는 것이 좋은 줄 알았어요.
    그러나 배열에 요소를 하나씩 꺼내어 일처리를 할 때에 원래 담은 자료형을 일일이 변환해야 하는 번거로움이 있어요.
    그래서 가급적이면 컬렉션프레임워크에 담는 자료형을 제한하여 담기를 권장합니다.
    이것을 제네릭이라고 합니다.

     

    ArrayList list = new ArrayList();

    >  원래는 list 에 온갖 자료형을 담을 수 있어요. 그러나 하나씩 배열 요소를 꺼낼 때 자료형을 일일이 변환해주어야 합니다.

     

    ArrayList<String> list = new ArrayList<String>();

    > 그렇기에  제네릭에 타입을 정하여 예시처럼 list에 String만 담을 수 있도록 하여 사용합니다.

     

    boolean		Boolean
    char		Character
    byte		Byte
    short		Short
    int		Integer
    long		Long
    float		Float
    double		Double

    > 또한 기본자료형을 객체로 만들어주는 클래스들 wrapper 클래스라고 합니다.

     

    // 이렇게 wrapper 클래스가 아닌 기본자료형을 쓰면 안돼요.
    // ArrayList<int> list = new ArrayList<int>();
    
    // 아래와 같이 기본자료형을 객체로 만든 wrapper 클래스를 사용해야 합니다.		
    ArrayList<Integer> list = new ArrayList<Integer>();

    > 자바의 컬렉션 프레임워크는 기본자료형을 상대하지 않아요. 객체를 상대합니다.

Coder yein