본문 바로가기
개발/java

Java Generics

by 가시죠 2022. 2. 25.
반응형

Class generic type

ClassGenericType<String> classGenericType = new ClassGenericType<>();

/**
* 클래스 내에 타입이 선언되어야 한다
* 
*/
class ClassGenericType<T> {

    // static 필드는 제너릭 타입을 가질 수 없다
    // private static T t;
    
    private T t;
    public void set(T t) {
        this.t = t;
    }
     public T get() {
        return t;
    }
}

 

Interface generic type

/**
* <T1, T2> 는 abstract method의 제너릭 타입을 다르게 주고 싶을 때 사용 이런식으로 사용
*/

interface InterfaceGenericType<T1, T2> {
	T1 doSomething(T2 t);
	T2 doSomething2(T1 t);
}
class InterfaceGenericTypeImpl implements InterfaceGenericType<String, Integer> {
	@Override
	public String doSomething(Integer t) {
		return null;
	}

	@Override
	public Integer doSomething2(String t) {
		return null;
	}
}

 

Method Generic Type

/**
* 메소드 제너릭 타입은 클래스에 제너릭 타입을 선언하지 않아도 되며 필요한 메서드에 제너릭 타입을 
* 선언하면 된다. 
* 유의 할 점은 메서드 아규먼트에 타입 매개변수 T가 선언되어 있으면 
* 메서드의 리턴 타입 앞에 제너릭 타입을 선언해야 한다.
* T, E, V, U 등등의 타입 매개변수가 선언되어 있다면 제너릭 타입이 필수적으로 선언되어야 한다라는 것.
*/

class MethodGenericType {
    public static <T> int methodGeneric(T[] list, T item) {
        int count = 0;
        for (T t : list) {
            if (item == t) {
                count++;
            }
        }
        return count;
    }
}

 

Generic Type variable

  • E - Element
  • K - Key
  • N - Number
  • T - Type
  • V - Value
반응형

댓글