JAVA/chapter01_JAVA_개념정리
chapter22_Generic
GAWON
2023. 5. 31. 18:18
1.1 제네릭(Generic)
- Java5부터 새로 추가된 타입으로 제네릭을 이용함으로써
잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.
- 컬렉션 등에서 널리 사용되므로 확실히 이해해 두어야 한다.
- 클래스나 메소드에서 컴파일 할 때 타입체크(Type check)를 하는 기능이다.
1.2 제네릭의 이점
- 컴파일 시 강한 타입 체크를 할 수 있다.
클래스나 메소드에서 컴파일 할 때 타입체크(Type check)를 하여
★실행 에러가 나기 전 컴파일 단계에서 에러를 사전에 방지한다.
- 미리 객체(인스턴스)의 공통적인 타입을 명시해서 처리하기 때문에 안정성이 높고,
★타입 변환(casting)을 제거한다.
ex)
<비제네릭 코드>
List list = new ArrayList();(동적코드인 인스턴스 객체)//업 캐스팅
list.add("hello"); //add-값을 넣는다
String str = (String)list.get(0); // 타입 변환을 해야 한다.
↓
<제네릭 코드>
List<String> list = new ArrayList<String>();//문자열타입 <String>
list.add("hello");//값을 넣는다
String str = list.get(0); // 타입 변환을 하지 않는다.
- 제네릭 클래스와 제네릭 메소드의 구현이 가능하다.
- 2개 이상의 제네릭 타입 선언이 가능하다.
- 주의사항
1) T obj = new T(); 불가능! (T의 크기를 알 수 없기 때문에) T는 제네릭
2) T[] arr = new T[3]; 불가능! (T의 크기를 알 수 없기 때문에)
3) T[] arr; 가능!
class Box <T> {
private T obj;
public void setObj(T obj) {
this.obj = obj;
}
public T getObj() {
return obj;
}
}
// main
Box<String> box = new Box<>(); // 구체화 : T가 무엇인지 알려주는 것
Box<String> box = new Box<String>(); (위와 동일한내용) // 구체화는 referenceType
참조타입 만 가능 하다. (PrimitiveType은 불가!!)
// 컴파일 시점
T <- String
class Box { // 컴파일 시점에 구체화 된 클래스
private String obj;
public void setObj(String obj) {
this.obj = obj;
}
public String getObj() {
return obj;
}
} //데이터 타입 명시한다( private/public)