Generic (보완 필요)

2022. 3. 26. 13:28java/java

Generic이란?

 

클래스 내부에서 사용하는 데이터의 타입 (Type)을 클래스의 인스턴스를 생성할 때 결정하는 것을 의미한다. 객체의 타입을 컴파일 시점에 체크하기 때문에 타입 안정성을 높이고 형 변환의 번거로움을 줄일 수 있다.

예를 들어 보자

 

아래와 같이 Box 클래스를 하나 생성해보자

 

package javaUtil;

public class Box {
	private Object obj;
	
	public void setObj(Object obj) {
		this.obj = obj;
	}
	
	public Object getObj() {
		return obj;
	}
}

int형 data type이든, String data type이든 모든 객체를 저장하기 위해 Object data type으로 obj를 선언했다.

 

이제 main 메서드에서 Box 클래스를 사용해보자

 

package javaUtil;

public class BoxExam {

	public static void main(String[] args) {
		
		Box box = new Box();
		box.setObj (new Object());          //Object 객체를 생성해서 obj에 담는다.
		Object obj = box.getObj();	//data type이 Object이기 때문에 반환도 할 수 있다.
		
		box.setObj("hello");		//Object data type이기 때문에 당연히 문자열을 저장할 수 있다.
		String str = (String)box.getObj();  //하지만 저장된 문자열은 Object로 오토박싱 되어 String data type 객체에 
        					//저장할 때는 String으로 형변환 해줘야 하는 번거로움이 생긴다.
		System.out.println(str);
		
		box.setObj(1);
		int value = (int)box.getObj();
        }

}

이럴때 번거롭게 형변환을 하지 않게 하기 위해 generic이 쓰인다. Box 클래스를 다시 정의해보자

 

package javaUtil;

public class Box<E> {
	private E obj;
	
	public void setObj(E obj) {
		this.obj = obj;
	}
	
	public E getObj() {
		return obj;
	}
}
package javaUtil;

public class BoxExam {

	public static void main(String[] args) {
		
		Box<Object> box = new Box<>();
		
		box.setObj(new Object());
		Object obj = box.getObj();
		
		Box<String> box2 = new Box<>();
		box2.setObj("hello");
		String str = box2.getObj();
		
	}

}

Box 객체를 생성할 때 <>안에 원하는 data type을 파라미터로 넣어주면 형변환을 하지 않아도 된다.

'java > java' 카테고리의 다른 글

인터페이스 선언  (0) 2022.04.14
인터페이스의 역할  (0) 2022.04.14
Set-HashSet (보완 필요)  (0) 2022.03.26
Object 클래스  (0) 2022.03.26
자바 데이터 타입  (0) 2022.03.13