제네릭 타입 : 타입을 파라미터로 가지는 클래스와 인터페이스. 선언시 클래스 또는 인터페이스 이름 뒤에 '< >' 부호 붙임. 일반적으로 대문자 한글자만 적는다.
장점
실행시 타입에러가 나는 것을 방지한다.
컴파일 시에 미리 타입을 강하게 체크해서 에러를 방지한다.
타입캐스트시 생기는 속도저하를 없앤다.
ArrayList에 저장되는 형태는 Object형태로 들어간다.
1 2 3 4 5 6 7 | List list = new ArrayList(); list.add("hello"); list.add("hi"); strTemp = (String)list.get(0); System.out.println(strTemp); strTemp = (String)list.get(1); System.out.println(strTemp); | cs |
이럴 경우 값을 얻을 때 타입케스팅을 명확히 해야하고 시간이 오래 걸린다.
1 2 3 4 | List<String> strList = new ArrayList(); strList.add("hi"); strTemp = strList.get(0); System.out.println(strTemp); | cs |
리스트를 만들 때 제네릭을 이용하여 형을 정해주면 타입케스팅을 하지 않아도 되서 시간이 적게 걸린다.
제네릭을 클래스에도 적용할 수 있다.
Box 클래스
1 2 3 4 5 6 | public class Box<T> { private T obj; public void set(T obj) {this.obj=obj;} public T get() {return obj;} } | cs |
메인문 내부
1 2 3 4 | Box<String> box = new Box<String>(); box.set("test"); strTemp = box.get(); System.out.println(strTemp); | cs |
T부분이 String로 변환되는 예제
제네릭은 여러 개 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 | public class Product<T, M> { private T kind; private M model; public void setKind(T kind) {this.kind=kind;} public void setModel(M model) {this.model=model;} public T getKind(){return kind;} public M getModel(){return model;} } | cs |
제네릭을 메소드에도 적용할 수 있다. 메소드에 적용할 땐 반환타입 앞에 제네릭을 선언하면 된다.
public <T> Box<T> boxing(T t);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Util { public static <T> Box<T> boxing(T t){ Box<T> box = new Box<T>(); box.set(t); return box; } public static <T> boolean setData(T t){ return true; } public static <K,V> boolean compare(Pair<K,V> p1, Pair<K,V> p2) { boolean keyCompare = p1.getKey().equals(p2.getKey()); boolean valueCompare = p1.getValue().equals(p2.getValue()); return keyCompare && valueCompare; } } | cs |
1 | boolean result1 = Util.<Integer,String>compare(p1, p2); | cs |
메소드를 사용할 때 제네릭을 명시적으로 선언해도 매개변수에 제네릭을 사용할 경우 묵시적으로 설정한다.
'프로그래밍 > Java, Android' 카테고리의 다른 글
(안드로이드) 파일처리 - 내부 메모리 파일 처리 (0) | 2016.07.10 |
---|---|
(Java) 파일복제 소스 (0) | 2016.07.10 |
(Java) 파일 입력과 출력 - FileInputStream, FileOutputStream (0) | 2016.07.10 |
(안드로이드) WebView를 이용한 Simple Application (0) | 2016.07.10 |
(안드로이드) 제목창, 타이틀 없애는 방법 (0) | 2016.07.10 |