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; }
}
Author And Source
이 문제에 관하여(AVA - 지네릭스(Generics) (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jo_dbsgh95/JAVA-지네릭스Generics-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)