AVA - 지네릭스(Generics) (1)

지네릭스란?

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다.

객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.

타입 안정성을 높인다는 것은 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준 다는 것이다.

지네릭스의 장점
1. 타입 안정성을 제공한다.
2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.

지네릭 클래스의 선언

	class Box{
    	Object item;
        
        void setItem(Object item) { this.item = item }
        Object getItem() {return item; }
        
    }

이 클래스를 지네릭 클래스로 변경하면 다음과 같이 클래스 옆에 ''를 붙이면 된다. 그리고 'Object'를 모두 'T'로 바꾼다.

	class Box<T> {	//제네릭 타입 T를 선언
		T item;
		
		void setItem(T item){ this.item = item }
		T getItem(){ return item; }

만일 타입의 변수가 여러 개인 경우에는 Map<K, V>와 같이 콤마를 구분자로 나열하면 된다.

이들은 기호의 종류만 다를 뿐 '임의의 참조형 타입'을 의미한다는 것은 모두 같다.

이제 지네릭 클래스가 된 Box클래스의 객체를 생성할 때는 다음과 같이 참조변수와 생성자에 타입 T대신에 사용될 실제 타입을 지정해주어야 한다.

  Box<String> b = new Box<String>();  	//타입 T대신, 실제 타입을 지정
  b.setItem(new Object());			    //에러, String이외의 타입은 지정 불가능
  b.setItem("ABC");					    //OK, String타입이므로 가능
  String item = /*(String)*/ b.getItem(); //형변환이 필요없음

위의 코드에서 타입 T대신에 String타입을 지정해줬으므로, 지네릭 클래스는 다음과 같이 정의된 것과 같다.

class Box {	//제네릭 타입을 String으로 지정
	String item;
  
	void setItem(String item)	{ this.item = item; }
	String getItem() { return item; }
}

좋은 웹페이지 즐겨찾기