본문 바로가기
뒷북 정리 (국비 교육)/java

[Java] step12. Generic Class

by 규글 2022. 4. 22.

step12. Generic Class

- 01

/*
 *   class  클래스명<Generic type>
 *   
 *    - 클래스를 정의할때 Generic type 을 지정해서 특정 type 을 동적으로 지정할수 있다. 
 */
public class FruitBox<T> {
	//필드 
	private T item;
	//메소드
	public void push(T item) {
		this.item=item;
	}
	public T pull() {
		return item;
	}
}

 generic은 생김새가 뭔가 '일반적인' 이라는 의미를 가진 general이 생각나지만, '포괄적인, 통칭의' 라는 의미를 가지고 있다. 이 generic은 class를 정의할 때 꺾새 < > 안에 type으로 작성한다. 왜 이렇게 작성하는가 하면 class 안에서 사용할 type을 동적으로 전달하기 위해서다. 예를 들어 String으로 이미 고정해버린 경우라면 type을 아예 바꾸지를 못한다. 하지만 정의할 때 <T> 라고 정의한다면, 아직 어떤 type인지 정한 것이 아니기 때문에 용도에 맞게 사용할 수 있어서 활용도가 높다고 한다. 하지만 아직은 어떻게 활용도가 높은 것인지 와닿지 않는다.

 

		// Generic  클래스를 다양하게 지정을 해서 객체 생성하고 참조값을 담을수 있다. 
		FruitBox<Apple> box1=new FruitBox<Apple>();
		FruitBox<Orange> box2=new FruitBox<Orange>();
		FruitBox<Banana> box3=new FruitBox<Banana>();
		
		// Generic  클래스로 지정한 type 객체를 넣어주어야 한다.
		box1.push(new Apple());
		box2.push(new Orange());
		box3.push(new Banana());
		
		// Generic  클래스로 지정한 type 객체가 리턴된다.
		Apple result1=box1.pull();
		Orange result2=box2.pull();
		Banana result3=box3.pull();

 예시를 보면 class를 만들 때 꺾새 < > 안에 객체 안의 field나 method에서 사용할 data의 type을 결정해준다. 그렇기에 그 type에 맞는 type의 객체를 넣어주어야 올바르게 동작한다.

 

- 02

		// 객체를 생성할때 Generic 클래스는 생략이 가능하다
		FruitBox<Apple> box1=new FruitBox<>();
		FruitBox<Orange> box2=new FruitBox<>();
		FruitBox<Banana> box3=new FruitBox<>();

 객체를 생성할 때 generic을 생략할 수 있다. 다만 선언하는 type에는 적어주어야 한다. 이미 선언할 때 확실히 해주었으니, new로 객체를 생성할 때는 굳이 필요한 내용이 아니라고 할 수 있겠다.

'뒷북 정리 (국비 교육) > java' 카테고리의 다른 글

[Java] step14. Exception  (0) 2022.04.24
[Java] step13. Util Class  (0) 2022.04.22
[Java] step11. Interface  (0) 2022.04.19
[Java] step10. Abstract Class  (0) 2022.04.19
[Java] step09. Extends  (0) 2022.04.19

댓글