ArrayList는 Object[] 모든자료형의 부모클래스인 Object배열이라. 어떤 타입의 객체들 다 들어갈 수 있다.
그래서 배열안에 String만 들어가다가 다른 타입의 객체가 들어갈 수 있어서. ArrayList<String>이렇게 제네릭을 String으로 선언해주면
안전성이 보장이된다.
데이터 타입을 일반화하고 컬렉션, 메서드, 클래스 등을 사용할때 런타임때 데이터 타입을 결정할 수 있다.
<>
제네릭클래스로 일반화 시키는 방법
public class ObjectArray<T>{
private T[] array;
public ObjectArray(int size){
// 제네릭 배열을 생성하는 방법은 배열을 생성한 후 형변환을 해야합니다.
array=(T[]) new Object[size];
}
public void set(int index, T value){
array[index]=value;
}
public T get(int index){
return array[index];
}
public int size(){
return array.length;
}
}
이렇게 클래스를 만들게되면 main에서 사용할때 ObjectArray<String>으로 선언해주면 가변타입 T가 String으로 변하고
Book, Movie 어떤객체로든 선언해서 범용적이게 클래스를 사용할 수 있다.
제네릭 타입을 선언하면서 데이터 타입을 결정하지 않아 재사용성이 높아진다.
<String>은 타입 매개변수로 넘어가게된다.
#멀티타입 파라미터
HashMap<Key, Value> 키, 밸류를 지정해준다.
HashMap<String, Integer>
#제한된 타입 파라미터
특정한 타입으로 타입 파라미터를 제한시켜 제네릭 클래스나 메서드에서 사용할 수 있는 타입을 제한할 수 있다.
class Name<T extends Number> 로 선언하면 Number클래스의 하위 클래스에 속해있는 타입만 사용할 수 있다.
예로 Number라고 선언하면 하위클래스인 Integer, Double, Float와 같은 숫자타입들만 사용할 수 있다.
'Back End > Java' 카테고리의 다른 글
스트림 API(stream) (0) | 2023.07.24 |
---|---|
람다식, 함수형 인터페이스 (0) | 2023.07.20 |
컬렉션 프레임워크 API(Collection Framework API) (0) | 2023.07.15 |
Wrapper Class (0) | 2023.07.15 |
정규표현식 정리 (0) | 2023.07.12 |