제네릭클래스의 타입변수, 임의의 참조형타입
이 변수들은 클래스가 실제로 사용될때 지정되며 타입변수를 사용해 클래스의 인스턴스 변수, 메서드의 매개변수 및 반환값의 데이터타입을 지정할 수 있다.
<T> Type 다양한 타입의 객체
"Type"의 약자로, 임의의 타입을 나타냅니다. 일반적으로 제네릭 클래스에서 객체의 타입을 지정할 때 사용
public class Box<T> {
private T content;
public Box(T content) {
this.content = content;
}
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
public static void main(String[] args) {
Box<String> stringBox = new Box<>("Hello");
System.out.println("Content of stringBox: " + stringBox.getContent());
Box<Integer> integerBox = new Box<>(123);
System.out.println("Content of integerBox: " + integerBox.getContent());
}
}
//Content of stringBox: Hello
//Content of integerBox: 123
<E> Element 요소
"Element"의 약자로, 컬렉션의 요소를 나타냅니다. 주로 컬렉션을 구현한 클래스에서 사용
import java.util.ArrayList;
import java.util.List;
public class MyList<E> {
private List<E> elements = new ArrayList<>();
public void addElement(E element) {
elements.add(element);
}
public void printElements() {
for (E element : elements) {
System.out.println(element);
}
}
public static void main(String[] args) {
MyList<String> stringList = new MyList<>();
stringList.addElement("Apple");
stringList.addElement("Banana");
stringList.addElement("Cherry");
stringList.printElements();
}
}
//Apple
//Banana
//Cherry
<K,V> Key, Value 키-값
"Key"와 "Value"의 약자로, 맵에서 사용되는 키와 값의 타입을 나타냅니다. 맵을 구현한 클래스에서 주로 사용
import java.util.HashMap;
import java.util.Map;
public class KeyValue<K, V> {
private Map<K, V> map = new HashMap<>();
public void addKeyValuePair(K key, V value) {
map.put(key, value);
}
public void printKeyValuePairs() {
for (Map.Entry<K, V> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
public static void main(String[] args) {
KeyValue<String, Integer> keyValuePairs = new KeyValue<>();
keyValuePairs.addKeyValuePair("John", 25);
keyValuePairs.addKeyValuePair("Alice", 30);
keyValuePairs.addKeyValuePair("Bob", 35);
keyValuePairs.printKeyValuePairs();
}
}
//John : 25
//Alice : 30
//Bob : 35
이때, 주의할점은
정적멤버 static!! 에는 인스턴스화 된 객체에 의존하지않기때문에 타입변수를 사용할 수 없다.
public class Example<T> {
private T value;
private static T staticValue; // 에러 발생: static 멤버에서는 T를 사용할 수 없음
public Example(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public static void doSomething() {
// staticValue = ...; // 에러 발생: static 멤버에서는 T를 사용할 수 없음
// System.out.println(staticValue); // 에러 발생: static 멤버에서는 T를 사용할 수 없음
}
}
https://standout.tistory.com/189
'JAVA' 카테고리의 다른 글
Generics 제네릭 클래스의 객체 생성과 사용 (0) | 2024.02.14 |
---|---|
Generics 지네릭스, 형변환을 생략하다 (0) | 2024.02.14 |
컬렉션과 관련된 메서드를 제공하는 Collections: 컬렉션의 동기화, 변경불가 컬렉션, 싱글톤 컬렉션, 한 종류의 객체만 저장하는 컬렉션 (0) | 2024.02.06 |
범위검색이나 정렬이 필요한 경우에 사용하는 TreeMap (0) | 2024.02.06 |
HashTable 보다 새버전인 HashMap (0) | 2024.02.06 |