본문 바로가기

Java/공부공부

[자바기초] 제네릭(Generic)에 대해서

 

* 제네릭 (Generic)

자바에서 컬렉션 클래스, 메서드, 인터페이스 등을 정의할 때 타입을 일반화하여 사용할 수 있도록 하는 기능.

클래스나 메서드를 정의할 떄 구체적인 데이터 타입을 미리 지정하지 않고, 나중에 사용 시(컴파일시점) 타입을 결정.

=> 코드의 재사용성을 높이고, 타입 안정성 확보.

 

 

* 제네릭 타입 매개변수 (Type Parameter)

실제 타입으로 대체되기 전에 사용되는 것. ( placeholder 역할 )

 

 - <E> (Element) : 컬렉션에서 요소를 나타내는데 사용.

 

 - <T> (Type) : 주로 클래스나 메서드에서 사용.

 

 - <K, V> (Key, Value) : 주로 맵(Map)과 관련된 제네릭에서 사용.

 

 - <?> (Unbounded Wildcard) : 모든 타입 나타내는 와일드카드, 주로 메서드의 매개변수로 사용.

  <? extends T> 혹은 <? super T> 방식으로도 사용 가능. 

 

 


  <E> (Element)

class Box<E>{
	
	private E content;

	public E getContent() {
		return content;
	}
	
	public void setContent(E content) {
		this.content = content;
	}
}


public class GenericExample<E>{
	public static void main(String[] args) {
		
        	// String 타입 인스턴스
		Box<String> strBox = new Box<>();
		strBox.setContent("Hello");
        
		System.out.println(strBox.getContent());	// Hello
		
        	// Integer 타입 인스턴스
		Box<Integer> intBox = new Box<>();
		intBox.setContent(30);
        
		System.out.println(intBox.getContent());	// 30
		
	}
}

 


<T> (Type)

import java.util.ArrayList;
import java.util.List;

public class GenericExample2{
	
	// 제네릭 메소드
	public static <T> void printList(List<T> list) {
		
		for (T item : list) {
			System.out.println(item);
		}
	}
	
	// 메인 메소드
	public static void main(String[] args) {
		
		// 문자열 리스트
		List<String> strList = new ArrayList<>();
		strList.add("Hello");
		strList.add("World");
		
		printList(strList);	// 제네릭 메소드 실행
		// Hello
		// World
		
		
		// 정수 리스트
		List<Integer> intList = new ArrayList<>();
		intList.add(10);
		intList.add(20);
		
		printList(intList);	// 제네릭 메소드 실행
		// 10
		// 20
		
	}
}

 

 


 

* 자바의 자료구조 *

 

https://fliphtml5.com/hkuy/hgwb

 

쉽게 배우는 자료구조 with 자바

https://www.hanbit.co.kr/store/books/look.php?p_code=B7033044159

fliphtml5.com