Java

[Java] 제네릭

wwxs 2024. 9. 23. 17:47

자바 제네릭

  • 클래스나 메서드를 정의할 때 사용할 데이터 타입을 미리 지정하는 대신 구체적인 사용 시 타입으로 대체
  • 특정 타입에 의존하지 않고 다양한 타입을 지원하는 클래스 또는 메서드 설계

(제네릭 타입 사용 예제)

더보기
// class 클래스명<제네릭타입>
class Pair<K, V>{
	// (접근제어자) 반환타입 필드명;
	private K key;
	private V value;

	public Pair(K key, V value) {
		this.key = key;
		this.value = value;
	}
	
	public K getKey() {
		return key;
	}
	public V getValue() {
		return value;
	}
	
	// 제네릭 메서드
	// (접근제한자 static) <제네릭타입> 반환타입 메서드명() {} 
	static <T> void print(T value) {
		System.out.println(value);
	}
}

 

 

 

제네릭 와일드 카드

  • ? 기호를 사용
  • 제네릭 타입을 불특정하게 사용하도록 지정
  • 주로 클래스 간에 상속 관계인 경우 사용
더보기
class Message<T> {
	private T message;
	
	T getMessage() {
		return message;
	}
}

public class Generic {
	public static void main(String[] args) {
		// [ Wrapper 자료형 ]
		// Integer >> int
		// Boolean >> boolean
		// Character >> char
		Pair<String, Integer> pair = new Pair<>("안녕하세요", 123);
		System.out.println(pair.getKey());	// 안녕하세요
		System.out.println(pair.getValue());	// 123
		pair.print("반갑습니다");	// 반갑습니다
		pair.print(123);	// 123

		// == 와일드 카드의 경우 타입에 대한 유연성을 제공 == //
		Message<?> m1;
		Message<String> m2 = null;
		
		m1 = new Message<>();
		String s = (String)m1.getMessage();
		Boolean b = (Boolean) m1.getMessage();
		
		// cf) 제네릭의 한계
		// : 기본 타입과 함께 사용할 수 X
		// >> 반드시 참조 타입으로 사용
		
	
	}
	

}