
제네릭(Generic) : 다양한 종류의 데이터를 처리할 수 있는 작성 기법
자료형을 구체적으로 적지 않고 기호로 적어 놓는 것
→ 자료형을 매개 변수로 만드는 것
main에서 new해서 객체가 생성될 때 타입이 정해짐
static으로 만들 수 없음 / 타이밍의 문제
<> : 다이아몬드
타입을 모를 때 : object 사용
object : 모든 타입을 다 받을 수 있음
object의 단점 : 메서드 호출을 못함
→ 다운 캐스팅을 해서 메서드를 호출
어쩔 수 없을 때 object를 사용해야 함(싱클톤 등)
사용자가 new를 한번 밖에 못할 때 사용
= 2차 개발자가 객체를 생성할 수 없을 때

부모가 메서드를 안 가지고 있기에 오버라이딩도 동적바인딩도 못함
하려면 따로 다운 캐스팅 해야 함
벡터가 아니라 동일한 object로 묶으니까 메서드 호출을 못함
다운 캐스팅을 해서 메서드를 호출해야 함
** 벡터 : 동일한 타입
object를 사용한 경우 → 다운 캐스팅
package ex13.example4;
class Model {
private static Model instance = new Model();
public static Model getInstance() {
return instance;
}
private Model() {
}
private Object data;
public void setData(Object data) {
this.data = data;
}
public Object getData() {
return data;
}
}
class User {
public int id = 1;
public String name = "홍길동";
public String email = "ssar@nate.com";
public void hello() {
System.out.println("안녕하세요");
}
}
public class GenericEx04 {
public static void main(String[] args) {
Model m = Model.getInstance();
User u = new User();
m.setData(u);
User ob = (User) m.getData();
ob.hello();
}
}
제네릭을 사용한 경우 → 객체 생성시 타입 부여
package ex13.example5;
class Model<T> {
private T data;
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
class User {
public int id = 1;
public String name = "홍길동";
public String email = "ssar@nate.com";
public void hello() {
System.out.println("안녕하세요");
}
}
public class GenericEx05 {
public static void main(String[] args) {
Model<User> m = new Model();
m.setData(new User());
User u = m.getData();
u.hello();
}
}
10개만 수용 가능 할 때
11번째는 웨이팅이 시작됨
10개를 미리 new해서 준비하는 것 : 제네릭
10개를 하고 가비지 컬렉션이 일어나고 다시 하는것 : object

printArray();
package ex13;
public class GenericMethodTest {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.printf("%s ", element);
}
System.out.println();
}
public static void main(String[] args) {
Integer[] iArray = {10, 20, 30, 40, 50};
Double[] dArray = { 1.1, 1.2, 1.3, 1.4, 1.5};
Character[] cArray = { 'K', 'O', 'R', 'E', 'A'};
printArray(iArray);
printArray(dArray);
printArray(cArray);
}
}

정수 배열, 실수 배열, 문자 배열을 모두 출력할 수 있는 제네릭 메서드
Share article