public class Program {
public static void main(String[] args) {
IntList list = new Intlist();
list.add(3);
list.add(5);
int size = list.size();
System.out.println("size: " + size);
list.clear();
size = list.size();
System.out.println("size: " + size);
list.add(7);
int num = list.get(0);
System.out.println("num: " + num);
}
}
|
cs |
public class IntList {
private int[] nums;
private int current;
public IntList() {
nums = new int[3];
current = 0;
}
public void add(int num) {
nums[current] = num;
current++;
}
public void clear() {
nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public int get(int index) {
if(current <= index)
throw new IndexOutOfBoundsException();
return nums[index];
}
}
|
cs |
정수형 값을 받는 배열을 사용해서 원시적인 방법으로 list와
list에 값을 추가, 배열사이즈 측정, 특정 Index에 저장된 값 구하기 같은 메소드를 구현하였다.
여기서 정수뿐만이 아니라 모든 자료형의 값을 받고 싶다면?
-> 최상위(범용)자료형 클래스인 Object를 사용한다.
문제는 배열객체에서 값을 참조하는 get()메소드의 경우
참조값이 무슨 자료형인지 알수가 없다.
이때 모든 자료형을 취급하는 배열 Object[] nums에서 참조한값
list.get(0)의 자료형은 알수가 없는 상태다.
그래서 Integer로 형변환을 하게 되는데
Object클래스에서는 원시자료형 Int가 존재하지 않기 때문에
참조형식을 Wrapper클래스인 Integer로 바꾸는 절차가 된다.
이렇게 데이터를 넣고 빼는 과정에서 형변환을 따로 할 필요없이
쓸수 있는게 Generics다.
public class GenericList <T> {
private Object[] nums;
private int current;
public GenericList() {
nums = new Object[3];
current = 0;
}
public void add(T num) {
nums[current] = num;
current++;
}
public void clear() {
nums = new Object[3];
current = 0;
}
public int size() {
return current;
}
public T get(int index) {
if(current <= index)
throw new IndexOutOfBoundsException();
return (T)nums[index];
}
}
cs
public class Program {
public static void main(String[] args) {
GenericList<Integer> list = new GenericList<>();
list.add(3);
list.add(5);
int size = list.size();
System.out.println("size: " + size);
list.clear();
size = list.size();
System.out.println("size: " + size);
list.add(7);
int num = list.get(0);
System.out.println("num: " + num);
}
}
|
cs |
public class Program {
public static void main(String[] args) {
GenericList<Integer> list = new GenericList<>();
list.add(3);
list.add(5);
int size = list.size();
System.out.println("size: " + size);
list.clear();
size = list.size();
System.out.println("size: " + size);
list.add(7);
int num = list.get(0);
System.out.println("num: " + num);
}
}
|
cs |
모든 자료형을 취급하는 Object 클래스와 상응하는 제네릭에서의 자료형은 <T>라고 쓴다.
'Java' 카테고리의 다른 글
JDBC: DB(mySQL+aws)의 데이터 수정 (0) | 2021.12.03 |
---|---|
JDBC 기본세팅(mySQL+aws) + SELECT Query 실행 (0) | 2021.12.01 |
인터페이스를 사용하는 이유 (0) | 2021.11.28 |
vscode야...넌 또 왜이러니... (0) | 2021.11.13 |
왜 객체변수명을 클래스명과 통일시키는가? (0) | 2021.11.09 |