Generics_제약
2024. 3. 21. 17:39ㆍJAVA
1. 타입 변수에 넣는 타입은, 인스턴스 별로 다르게 대입 가능하다.
ex)
Zoo<Dog> DogArea = new Zoo();
Zoo<Cat> CatArea = new Zoo();
- static 멤버에 타입 변수는 사용할 수 없다.
ex>
class Zoo<T> {
static T animal; // 에러 발생
static int compare(T t1, T t2){...} // 에러 발생
}
왜 그럴까?
타입 변수에 대입하는 타입은 인스턴스 별로 다르게 대입 가능하다고 했다.
static에 타입변수?
static에 대해 잠시 복기 해보자.
static 키워드
사용 위치 = class, method, field
저장위치 = 클래스(메서드) 메모리 영역
클래스 메모리 영역 특징
- 프로그램 실행 시 static 키워드가 사용된 데이터들을 1회 생성하여 클래스 메모리 영역에 저장.
- 어디서든 사용할 수 있음. (공유됨)
위의 내용을 바탕으로 결론을 도출해보면,
인스턴스 별 대입 가능 vs 모두가 공용으로 사용
이 된다.
이렇게 될 경우, 인스턴스 별 대입 가능하다는 제약과 기능이 무의미 해지므로, 컴파일 단계에서 static 을 사용하지 못하게 한 것이다.
2. 배열 생성 시 타입 변수 사용 불가. 타입 변수로 배열 선언은 가능
ex)
class Box<T>{
T[] animalArray;
T[] toArray(){
T[] tempArray = new T[itemArr.length]; // 에러.
}
}
new 연산자를 사용하기 위해선, 생성할 인스턴스의 타입이 확정 돼 있어야 한다.
T에는 어떤 타입이 대입될지 불확실하므로 배열 생성 시 사용 불가하다.
'JAVA' 카테고리의 다른 글
| java.lang_Object Class (0) | 2024.04.05 |
|---|---|
| java.lang (0) | 2024.04.04 |
| Generics_제한 (0) | 2024.03.21 |
| Optional<T> (0) | 2024.02.23 |
| 컬렉션_TreeSet (0) | 2024.02.20 |