Java

자바 step11 - GenericClass

코딩탕탕 2022. 11. 7. 18:29

 

포괄 클래스(Generic Class)의 이해

 

자바 [JAVA] - 제네릭(Generic)의 이해

정적언어(C, C++, C#, Java)을 다뤄보신 분이라면 제네릭(Generic)에 대해 잘 알지는 못하더라도 한 번쯤은 들어봤을 것이다. 특히 자료구조 같이 구조체를 직접 만들어 사용할 때 많이 쓰이기도 하고

st-lab.tistory.com

 

 

기본 바탕이 되는 포괄 클래스(Generic Class)를 생성하였다.

package test.mypac;
/*
 *   T 는 type 파라미터 이다.
 *   
 *   T 를 포괄 클래스(Generic 클래스) 라고 한다.
 */
public class FruitBox<T> {
	// 필드
	private T item;
	// 필드에 값을 넣는 메소드
	public void setItem(T item) {
		this.item=item;
	}
	// 필드에 저장된 값을 리턴하는 메소드
	public T getItem() {
		return item;
	}
}

 

포괄 클래스인 FruitBox에 들어갈 외부 class(아이템)로 Apple class를 만들었고 이와 같은 class로 banana, orange class를 만들었다.

package test.mypac;

public class Apple {

}

 

 

package test.main;

import test.mypac.Apple;
import test.mypac.Banana;
import test.mypac.FruitBox;

public class MainClass01 {
	public static void main(String[] args) {
		// Generic 클래스를 Apple 로 지정해서 FruitBox 객체 생성하기
		FruitBox<Apple> box1=new FruitBox<Apple>();
		// 메소드의 인자로 Apple type 전달하기
		box1.setItem(new Apple());
		// 메소드가 리턴해주는 Apple type 받아오기
		Apple item1=box1.getItem();

		// Generic 클래스를 Bnana 로 지정해서 FruitBox 객체를 생성해서 위와 비슷한 작업을 해보세요.
		FruitBox<Banana> box2 = new FruitBox<Banana>();
		box2.setItem(new Banana());
		Banana item2=box2.getItem();
	}
}

FruitBox<?>안에 ?에 들어갈 것으로 외부 Apple, Bnana, Orange class를 넣었고, 그 아이템을 사용하여 메소드를 호출할 수 있다.

 

 

package test.main;

import test.mypac.Apple;
import test.mypac.Banana;
import test.mypac.FruitBox;
import test.mypac.Orange;

public class MainClass02 {
	public static void main(String[] args) {
		// 객체를 생성할 때 Generic 클래스는 생략이 가능하다.
		FruitBox<Apple> box1=new FruitBox<>();
		FruitBox<Banana> box2=new FruitBox<>();
		FruitBox<Orange> box3=new FruitBox<>();
	}
}