-> 블로그 이전

[Java] 컬렉션과 제네릭

2021. 12. 10. 20:27Language`/Java

배열 vs 컬렉션

배열

- 고정 크기

- 배열의 중간에 삽입/삭제가 이루어지면 데이터들이 이동해야 한다

컬렉션

- 가변 크기

- 컬렉션 내에서 삽입/삭제가 이루어지면 컬렉션이 자동으로 데이터들을 이동시킨다

- '제네릭'이라는 기법으로 구현

 

- Vertor<E>, ArrayList<E> : 가변 크기의 배열 구현

- LinkedList<E> : 노드들이 링크로 연결되는 리스트 구현

- Stack<E> : 스택 구현

- HashSet<E> : 집합 구현

  • 모두 Collection<E>를 상속받음
  • 단일 클래스의 객체만을 요소로 다룬다

 

컬렉션 특징

1. '제네릭'이라는 기법으로 구현

- 컬렉션 클래스의 이름에 <E>, <K>, <V> 등(타입 매개변수) 이 항상 포함

- 컬렉션을 여러 종류의 타입으로 변신할 수 있도록(일반화) 타입 매개변수를 사용

- 컬렉션을 사용할 때는 지정된 특정 타입의 값만 저장 가능

2. 컬렉션의 요소는 객체들만 가능

- int, char, double등 기본 타입의 데이터는 요소로 불가능

- Wrapper 클래스 타입만 가능 (Integer, Double, Character 등)

Vector<int> v = new Vector<int>(); // 컴파일 오류 : int는 사용 불가
Vector<Integer> v = new Vector<Integer>(); // 정상 코드

 

제네릭

- 모든 종류의 타입을 다룰 수 있도록, 클래스/메소드를 타입 매개변수를 이용하여 선언하는 기법

- 클래스 코드를 '일반화'시키는 도구

class Stack<E>{
    ...
    void push(E item){...}
    E pop(){...}
    ...
}

- <E>에 구체적인 타입을 지정하면, 지정된 타입만 다룰 수 있는 구체화된 스택

  • <E> : Integer -> Integer 타입만 다루는 스택
  • <E> : Point -> Point 타입의 객체만 다루는 스택

 

제네릭 타입 매개변수

  • <E> : Element
  • <T> : Type
  • <V> : Value
  • <K> : Key