본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

제네릭클래스의 타입변수: <T> <E> <K,V>

제네릭클래스의 타입변수, 임의의 참조형타입

이 변수들은 클래스가 실제로 사용될때 지정되며 타입변수를 사용해 클래스의 인스턴스 변수, 메서드의 매개변수 및 반환값의 데이터타입을 지정할 수 있다.

 

<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

 

여러 인스턴스에서 공유하다, static

static 여러 인스턴스에서 공유해 사용 getter setter없이 이용이 가능하며, 값을 모두 공유해서 쓰기때문에 함께 만들어갈 수 있는 존재가 된다. 예로, 아래코드에서 count 값은 객체를 생성할 때마다

standout.tistory.com