본문 바로가기
Language/Java

지네릭스

by 서초록 2022. 1. 16.

지네릭스란 컴파일시 타입을 체크해주는 기능이다. 

ArrayList는 모든 종류의 객체가 저장가능한데 타입을 지정해주고 객체를 생성해주면 지정한 타입의 객체만 생성할 수 있게된다. 

 

import java.util.ArrayList;

public class GenericTest {
	public static void main(String[] args){
    ArrayList list = new ArrayList();
    list.add(10);
    list.add(20);
    list.add("30"); //String추가
    
    Integer i = (Integer)list.get(2); //컴파일 OK
    
    System.out.println(list);
    
    }
}

이렇게 실행했을 시 ClassCastException(형변환에러, 실행시 발생에러)이 일어난다.

 

지네릭스의 장점

①타입 안정성을 제공. 타입체크를 보다 정확하게 할 수 있음. 

   ClassCassException(형변환에러)를 막을 수 있음. 
②타입체크와 형변환을 생략할 수 있으므로 간결해짐

 

 

JDK1.5 이후 지네릭스가 도입이후 지네릭타입을 선언해줘야하는 경우 아래와 같이 작성하는게 좋다. 

클래스안에 Object타입이 있는 경우 일반클래스에서 지네릭클래스로 변환되었다.  

 

지네릭스는 컴파일러에게 타입 정보를 제공해서 RuntimeError를 막는다. 

타입변수

Object를 포함한 클래스는 지네릭클래스로 변환되었다.

지네릭클래스는 타입변수 E를 선언해주고 Object를 타입변수 E로 바꼈다.  

 

타입변수에 대입하기

ArrayList list 

 

지네릭스 용어

Box<T> 지네릭클래스. 

T 타입변수 또는 타입매개변수

Box 원래 타입

 

타입은 객체 생성할 때마다 다를 수 있음. 메서드 호출할 때마다 다른 값을 줄 수 있듯이. 

 

🎈지네릭타입과 다형성

참조변수와 생성자에 대입된 타입은 일치해야한다.

지네릭클래스간의 다형성은 성립한다. (여전히 대입된 타입은 일치해야한다)

 

🎈Iterator<E>

컬렉션 클래스뿐만 아니라 Iterator에도 제네릭스가 적용되어있다.

 

🎈HashMap<K, V>

HashMap처럼 데이터를 키와 값의 형태로 저장하는 컬렉션클래스는 지정해야할 타입이 두 개이다. 

이와같이 여러개의 타입변수가 필요한 경우 콤마로 구분해서 선언해야한다. 

'Language > Java' 카테고리의 다른 글

Collections  (0) 2022.01.14
Arrays  (0) 2022.01.11
Iterator, ListIterator, Enumeration  (0) 2022.01.11
LinkedList  (0) 2021.12.18
객체지향프로그래밍2  (0) 2021.10.26