Generics

HH_Nebula·2022년 9월 3일
0

Collection / Generic

목록 보기
7/7

제네릭

컬렉션은 제네릭이라는 기법으로 구현되어 있다.
켈력션 클래스나 인터페이스의 declaration 을 열어보면 아래와 같이 작성이 되어 있다.

public interface Collection<E> extends Iterable<E> {
    // Query Operations
    
public interface List<E> extends Collection<E> {
    // Query Operations

public interface Map<K, V> {
    // Query Operations

위와 같이 <K> <V> <E> 등 꺽쇠(<, >)로 작성된 내용을 확인할 수 있다. 이들은 타입 매개 변수 으로 불리며 컬렉션의 요소(Element)를 일반화 시킨 타입이다.

예를 들어 new LinkedArray<Integer> 처럼 선언한 경우 구체적인 타입을 지정한, Integer 값 만을 저장하는 LinkedArray 인 것이다.

특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 컬렉션을 일반화시키기 위해 <E> 를 사용하는 것이므로 E 를 일반화 시킨 타입 혹은 제네릭 타입이라고 부른다.

컬렉션의 요소들은 기본적으로 객체들만 가능하므로 기본형 타입들은 컬렉션의 요소로 불가능하지만, 기본 타입의 값이 삽입되면 오토박싱(Auto Boxing)에 의해 Wrapper 클래스로 변환되어 객체 형태로 저장한다.

제네릭은 <E> , 일반화된 타입이며 여러 종류의 타입으로 변환하여 컬렉션에 사용한다.

컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스를 컬렉션 클래스라고 한다.

제네릭의 기본 개념

위에 설명하였듯 제네릭은 모든 종류의 타입을 다룰 수 있도록 일반화된 타입 매개 변수, 제네릭 타입으로 클래스나 메서드를 선언하는 기법으로 C++의 Template과 동일하다.

Stack<E> 을 예시로 들자면 Stack 클래스는 제네릭 타입을 가진 제네릭 클래스이며 E 라고 작성된 제네릭 타입을 되어있는데 Stack<E> 에서 구체적인 타입을 지정하면 지정된 타입만 다룰 수 있는 구체화된 Stack 이 된다.

컬렉션 클래스에서 타입 매개변수로 사용하는 문자는 다른 변수와 혼동을 막기 위해 일반적으로는 하나의 대문자만을 사용한다.

E 는 Element, 요소를 뜻하며 T 는 Type, 타입을 의미한다. K 는 Key, 키를, V 는 Value, 값을 의미한다.

profile
공부하고 기록하고 복습하고

0개의 댓글