Generics
지네릭스
1. 지네릭스란?
참고)
<T> : 형식상 오류
-> 컴파일 시점에 형식상의 오류를 해결하기 위해서 지네릭 타입은 모두 제거
class Box<T> { .... }
2) 타입변수 T
3) 원시타입 Box
(타입은 객체 생성시 결정)
사용의 제한점)
static 멤버 변수에는 타입 매개변수 사용 불가
- 처음부터 자료형이 명시 되어야 공간을 할당
배열 생성 불가
- new 연산자 : 배열 공간 생성 : 명확한 자료형을 알아야 공간을 계산 ..
지네릭스의 제한
1) 타입 매개변수와 동일한 자료형
2) static멤버에 타입 변수 T를 사용할 수 없다.
3) 지네릭 타입의 배열을 생성하는 것도 허용하지 않는다.
지네릭 클래스의 객체 생성과 사용
제한된 지네릭 클래스
<T extends 타입> -> T 는 타입의 하위 클래스
<T extends 타입1 & 타입2> -> T는 타입1의 하위 클래스 이고 타입2 인터페이스의 구현 클래스
// T는 Fruit의 하위클래스로 한정
public class Box<T extends Fruit> {
public class Jucier {
public static void make(FruitBox<?> box) {
ArrayList<?> fruits = box.getItems();
System.out.println(fruits);
}
}
apple, grape 모두 가능.
public abstract class Fruits {
}
public class Apple extends Fruits {
public String toString() {
return "사과";
}
}
public class Jucier {
public static void make(FruitBox<? extends Fruits> box) {
ArrayList<?> fruits = box.getItems();
System.out.println(fruits);
}
}
이렇게 제한할경우 다른 클래스의 유입을 막을 수
8. 지네릭 메서드
타입을 클래스에 정의하면 : 지네릭 클래스
예) class Box<T> : T의 자료형은 객체가 생성될때 결정
타입을 메서드의 반환값 타입 앞에 정의하면 : 지네릭 메서드
public <T, U> String method(T str1, U str2); : T, U의 자료형은 함수가 호출될 때 결정
static으로 정의해도댐