JAVA :: 컬렉션과 제네릭

📝 컬렉션

💬 요소라고 불리는 객체들의 삽입, 삭제, 검색 기능을 갖춘 가변 크기의 컨테이너

💡 특징

💬 컬렉션은 제네릭이라는 기법으로 구현되어 있다. 때문에, 컬렉션 클래스나 인터페이스 이름에는 타입 매개 변수가 항상 포함된다.

⚠ 컬렉션을 생성하고 사용할 때는 오직 한 타입의 값만 저장하고 다룬다.

💬 컬렉션의 요소객체 (ex. Integer, String)들만 가능하다.

Vector<int> v = new Vector<int>(); // 컴파일 오류. int는 사용 불가
Vector<Integer> v = new Vector<Integer>();

💡 타입 매개 변수

💬 <E>, <T>, <K> 등을 말하며, 컬렉션의 요소를 일반화시킨 타입이다.

💬 컬렉션이 다룰 수 있는 원소의 타입을 여러 종류로 변신할 수 있도록 사용한다.

⚠ 이때 안에 있는 E, T, V 등을 제네릭 타입이라고 부른다.

💬 타입 매개 변수에는 구체적인 타입 (ex. Integer, String)을 지정하여 사용한다.


📝 제네릭

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

💡 제네릭 타입 매개 변수

E : Element를 의미

T : Type을 의미

V : Value을 의미

K : Key을 의미

💡 제네릭 클래스

💬 제네릭 클래스를 선언하는 방법은 기존의 클래스 선언 방법에서, 클래스 이름 다음에 일반화된 타입의 매개 변수를 <와 >사이에 추가한다는 차이가 있다.

💬 제네릭 클래스 작성

타입 매개 변수 T를 가진 제네릭 클래스 Myclass 선언

public class MyClass<T> { //제네릭 클래스 MyClass, 타입 매개 변수 T
    T val; // 변수 val의 타입은 T
    void set(T a) {
        val = a; // T 타입의 값 a를 val에 지정
    }
    T get() {
        return val; // T 타입의 값 val 리턴
    }
}

💬 제네릭 객체 생성 및 활용

구체적인 타입을 대입하고 구체적인 객체를 생성

MyClass<String> s = new MyClass<String>(); // 제네릭 타입 T를 String으로 구체화
s.set("apple");
System.out.println(s.get()); // "apple" 출력

MyClass<Integer> n = new MyClass<Integer>(); // 제네릭 타입 T를 Integer으로 구체화
n.set(3);
System.out.println(n.get()); // 5 출력

Reference

명품 자바 에센셜 (2014, 황기태)

좋은 웹페이지 즐겨찾기