본문 바로가기
java

Generics 01 제네릭스란?

by 킹차니 2021. 12. 31.

제네릭스란?

- 컴파일시 타입을 체크해주는 기능

ArrayList<TV> tvList = new ArrayList<TV>();
tvList.add(new TV()); // OK
tvList.add(new Audio()); // ERROR!

Tv tv = (TV)tvList.get(0); //컴파일러가 이미 TV타입의 ArrayList임을 알고 있으므로
Tv tv = tvList.get(0);  //이렇게 형 변환 안해줘도 된다.

장점:

  1. 타입 안정성을 제공한다.
  2. 타입체크와 형변환을 생략할 수 있으므로, 코드가 간결해진다.

 

 

 

 

 

타입변수

-클래스를 작성할 때, Object타입 대신 타입 변수(E)를 선언해서 사용.

public class ArrayList extends AbstractList{
	private transient Object[] elementData;
	public booleam add (Object o) { ... };
	...
}

//아래와 같이 Object타입 대신 타입변수 E사용

public class ArrayList<E> extends AbstractList<E>{
	private transient E[] elementData;
	public booleam add (E o) { ... };
	...
}

 

타입 변수에 대입하기

-객체를 생성시, 타입변수(E) 대신 실제 타입(TV)을 지정(대입)

//타입 변수 E 대신에 실제 타입 TV를 대입
ArrayList<TV> tvList = new ArrayList<TV>();

위와 같이 하면 ArrayList의 타입변수 E가 TV로 바뀐다.

public class ArrayList<E> extends AbstractList<E>{
	private transient E[] elementData;
	public booleam add (E o) { ... };
	...
}

//아래처럼 E가 TV로 바뀐다.

public class ArrayList<TV> extends AbstractList<TV>{
	private transient TV[] elementData;
	public booleam add (TV o) { ... };
	...
}

EX)

import java.util.ArrayList;
import java.util.List;

public class EX01 {
    public static void main(String[] args) {
        List<TV> tvList = new ArrayList<TV>(); //TV 타입만 저장가능
        tvList.add(new TV());
//        tvList.add(new Audio());// ERROR!
        TV tv = tvList.get(0); // 형변환 안해줘도 된다.
    }
}

 

출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS