컬렉션 / 제네릭 예습
- 컬렉션이란? : 데이터를 수집하고 관리해주는 객체
- 컬렉션을 사용하면 데이터 관리를 보다 쉽게 할 수 있다
- add(3) 이런식으로 쓰면 3이 배열에 들어감
- 공간이 부족해도 알아서 공간을 늘려준다
- 가변길이의 배열을 쓰고 싶을때 컬렉션을 쓴다
-오브젝트는 공통 자료형(범용 자료형)이다
-오브젝트에 값을 담으려면 박싱을 해서 담아야함
(반대로 꺼낼때는 언박싱 이라고 한다)
-int > 기본형 / Integer > 오브젝트형
- objectList() : 형식은 모든 형태를 담을수 있다
- 오브젝트 형식을 쓰기 전에는 list.add(3) 정수만 담을수 있었는데 objectList()로 바꾸고 나서는 문자열도 담을수 있게 됨
list.add("hello")
- 하지만 오브젝트(범용자료형)의 단점은 모든 형식을 담을수 있기 때문에 반환받는 형식을 맞춰주기가 힘들다(그래서 일일이 형변환을 해줘야됨)
- 그래서 이런 단점을 보완하고자 나온것이 제네릭이다
- 제네릭은 어떤 자료형이든 될수있는 일종의 템플릿 같은것이다
- 제네릭을 표현할때는 꺾음괄호를 쓴다 GList<String(자료형 적기)> list = new GList();
- 자료형을 한개이상 표현할수도 있다 GList<string(String,Integer)=""> list = new GList();</string(자료형> 다만, 허용되는 자료형은 int 이런 기본형은 안되고 오브젝트로써의 형식 변환이 가능한 래퍼형식,클래스형식만 가능하다
- class에서 쓸때는 <>안에 키워드??를 적어준다
- 앞의 괄호에서 형식명칭을 적어주고 있다면 뒤에는 굳이 안적어줘도 된다
- 키워드를 적어줬으면 반환 하는것들도 키워드를 적고,형변환을 해야한다
package obj;
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() {
current = 0;
}
public int size() {
return current;
}
public T get(int index) {
if(current<=index)
throw new IndexOutOfBoundsException();
return (T)nums[index];
}
}
- 제네릭을 사용하지 않으면 메인 메서드에서 형식 확인을 하고 전부 다 그형식으로 맞췄어야 하는데, 제네릭을 사용하면
클래스쪽에 적어준 키워드 하나만 갖고 명시해주면 되기 때문에 덜 번거롭게 코드작성을 할수있다?