Generic (보완 필요)
2022. 3. 26. 13:28ㆍjava/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 |