<ObjectBox>
어떤 객체를 저장할 수 있고 꺼낼 수 있는 Box를 만들어보자.
public class ObjectBox {
private Object object;
// 저장한다
public void set(Object obj) {
this.object = obj;
}
// 꺼낸다
public Object get() {
return this.object;
}
}
public class ObjectBoxMain {
public static void main(String[] args) {
ObjectBox box = new ObjectBox;
box.set("kim");
String str = (String)box.get(); // 형 변환 필요
System.out.println(str.toUpperCase()); // KIM 출력
box.set(new Integer(5));
Integer i = (Integer)box.get(); // 형 변환 필요
System.out.println(i.intValue());
}
}
ObjectBox는 object 타입을 가지기 때문에 object 후손들을 넣었다가 꺼낼 수 있다. 단, 꺼내서 사용할 때는 원래 타입으로 변환시키는 과정이 필요하다.
그래서 형 변환 필요없이, 박스에 타입을 지정하고 수정할 수 있는 GenericBox 가 필요하다.
<GenericBox>
public class GenericBox<T> {
private T t;
public void set(T obj) {
this.t = obj;
}
public T get() {
return this.t;
}
}
<T>: T라는 이름의 제네릭 타입을 선언한다.
제네릭은 클래스 이름 뒤나, 메소드의 리턴타입 앞에 붙을 수 있다.
public class GenericBoxMain {
public static void main(String[] args) {
// String을 저장할 수 있는 Box를 만든다.
GenericBox<String> genericBox = new GenericBox<>();
genericBox.set("kim");
String str = genericBox.get();
System.out.println(str.toUpperCase());
// Integer을 저장할 수 있는 Box를 만든다.
GenericBox<Integer> intBox = new GenericBox<>();
intBox.set(new Integer(5));
Integer intValue = intBox.get();
System.out.println(intValue);
GenericBox<Object> objBox = new GenericBox<>();
objBox.set("hello");
String str2 = (String)objBox.get(); //object박스에 들어있었기 때문에 형변환 필요.
System.out.println(str);
}
}
제네릭의 장점: 정해진 타입만 사용하도록 강제한다. -> 타입을 강제하면 컴파일할때 잘못된 타입의 값이 저장되는 것을 방지할 수 있다.
'공부 > Java' 카테고리의 다른 글
[즐거운자바](9) - 컬렉션 프레임워크 (1) | 2023.10.18 |
---|---|
[즐거운자바] 객체지향(7) - 참조형 배열 (1) | 2023.10.17 |
[즐거운자바] 객체지향(6) - 인터페이스와 로또 예제 (0) | 2023.10.16 |
[즐거운자바] 객체지향(5) - 추상클래스 + 접근제한자 (0) | 2023.10.13 |
[즐거운자바] 객체지향(4) - 생성자 (0) | 2023.10.13 |