🟩 제네릭(Generic)이란?
콜렉션을 사용하면서 반환하는 값이 무엇 인지 모르면 치명적이게 된다.
그래서 우리는 자료형식을 비우게 된다.
자바에서는 생성된 자료형식으로 Object를 만들고, 담고 빼줄때 사용자가 원하는 형식으로 형변환을 해준다.
Object가 들어오고, 나갈때 사용자가 원하는 어떠한 형식으로 바꿔주는 것을 Generic이라고 한다.
GList<String,Integer> list = new GList<String,Integer>();
반드시 Object로 변환이 가능한 Wrapper형식으로 적어줘야한다. [int (x) / Integer (o)]
public class GList<타입, 두번째타입>
public class GList<T>//상징적으로 <T>를 많이 씀
예시 코드
package com.newlecture.app.util;
public class Program {
public static void main(String[] args) {
GList<Integer> list = new GList<>();
list.add(3);
list.add(5);
int size = list.size();
System.out.printf("size : %d\n",size);
list.clear();
size = list.size();
System.out.printf("size : %d\n",size);
list.add(7);
int num = (Integer) list.get(0); //Object -> Integer
System.out.printf("num : %d\n",num);
//num= (Integer)list.get(1);
}
}
package com.newlecture.app.util;
public class GList<T> {
private Object[] nums;
private int current;
public GList(){
nums = new Object[3];
current =0;
}
public void add(T num) {
nums[current]=num;
current++;
}
public void clear() {
// for(int i=0;i<current;i++)
// nums[i]=0;
//nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public T get(int index) {
if(current<=index)
throw new IndexOutOfBoundsException();
return (T)nums[index];
}
}
🟩 가변크기 컬렉션으로 변경하기
package com.newlecture.app.util;
public class Program {
public static void main(String[] args) {
GList<Integer> list = new GList<>();
list.add(3);
list.add(5);
int size = list.size();
System.out.printf("size : %d\n",size);
list.clear();
size = list.size();
System.out.printf("size : %d\n",size);
list.add(7);
int num = (Integer) list.get(0); //Object -> Integer
System.out.printf("num : %d\n",num);
//num= (Integer)list.get(1);
}
}
package com.newlecture.app.util;
public class GList<T> {
private Object[] nums;
private int current;
private int capacity;//용량
private int amount;//추가 증가량
public GList() {
current = 0;
capacity = 3;
amount = 5;
nums = new Object[capacity];
}
public void add(T num) {
//만약에 공간이 모자라면
if (capacity <= current) {
Object[] temp = new Object[capacity + current];
for(int i =0;i<current;i++)
temp[i]=nums[i];
nums = temp;
capacity+=amount;
}
nums[current] = num;
current++;
}
public void clear() {
// for(int i=0;i<current;i++)
// nums[i]=0;
//nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public T get(int index) {
if (current <= index)
throw new IndexOutOfBoundsException();
return (T) nums[index];
}
}
🟩 자바 컬렉션의 3대 계보 (Set/List/Map)
List<Integer> list = new ArrayList<>();
list.add(3);//Index 0
list.add(5);//Index 1
list.add(7);//Index 2
list.add(8);//Index 3
list.get(2);// 7이라는 값이 나온다.
System.out.println(list.get(2));
System.out.println(list.size());
// ----------------------------------------------
//중복제거할때 유용하게 사용한다.
Set<Integer> set = new HashSet<>();
set.add(3);
set.add(5);
set.add(6);
set.add(7);
set.add(7);
set.add(7);
System.out.println(set.add(7));
System.out.println(set.add(8));
System.out.println(set.size());
// ---------------------------------------------
Map<String, Object> map = new HashMap<>();
map.put("id", 3);
map.put("title", "Hello");
map.put("hit", 12);
System.out.println(map.get("title"));
'IT > JAVA' 카테고리의 다른 글
[Java] 수업내용 메모 (0) | 2023.08.30 |
---|---|
[JAVA] ✏️ Boxing과 Unboxing (1) | 2023.07.09 |
[Java] 컬렉션(Collection) ? (1) | 2023.07.09 |
[Java] 함수 오버로드(overload) (1) | 2023.07.04 |
[Java]구조적인 프로그래밍(메서드) (2) | 2023.06.28 |