Back End/Java

제네릭(Generic)

DevHam94 2023. 7. 16. 16:36

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