제네릭은 런타임이 아닌 컴파일 타임에 유형 오류를 포착하기 위해 다양한 유형의 객체에서 작동할 수 있는 유형이 안전한 클래스와 메서드를 만드는 방법입니다.
버전 5.2에 도입되었습니다.
public class GenericClass{private 최종 T 항목; 공개 GenericClass(T 항목) {this.item = 항목; } 공개 T getItem() {항목 반환; } }
private staticvoid printItem(T item) {System.out.println(item.toString()); }
특정 유형이나 해당 하위 유형을 제한하거나 바인딩하는 데 사용됩니다.
이를 통해 제한된 클래스나 인터페이스의 메서드를 호출할 수 있습니다.
private staticdouble add(T numOne, T numTwo) {return numOne.doubleValue() + numTwo.doubleValue(); }
컴파일러가 제네릭 메서드나 생성자 매개변수의 유형을 자동으로 결정할 수 있도록 하는 기능입니다.
Listlist = new ArrayList<>();
>
기호는 알 수 없는 유형 인수를 나타내는 데 사용됩니다.
private static void printItemsInList(List> list) {for (객체 항목 : 목록) {System.out.println(item); } }
유형 인수가 특정 클래스 또는 인터페이스의 하위 유형이어야 함을 지정하는 데 사용됩니다.
항목에 접근하는 데 사용됩니다.
private static void printItemsInList(List 확장 번호> 목록) {for (번호 번호 : 목록) {System.out.println(번호); } }
유형 인수가 특정 클래스 또는 인터페이스의 상위 유형이어야 함을 지정하는 데 사용됩니다.
항목을 수정하는데 사용됩니다.
목록 슈퍼 번호> 숫자 = 새로운 ArrayList<>();numbers.add(10);numbers.add(10.2);numbers.add(10.4f);System.out.println(numbers);
유형 안전
데이터 유형은 런타임이 아닌 컴파일 타임에 수정되므로 코드가 더욱 강력하고 안정적으로 만들어집니다.
코드 재사용성
여러 유형의 데이터로 작업할 수 있는 클래스와 메서드를 작성하면 작성해야 하는 코드의 양을 줄이는 데 도움이 됩니다.
성능
유형 캐스트의 필요성을 줄이고 런타임 유형 검사의 오버헤드를 방지하여 성능을 향상시킵니다.
유형 삭제
이는 런타임 시 일반 코드를 삭제하여 특정 상황에서 제네릭의 유용성을 제한할 수 있는 핵심 기능입니다.
기본 유형에 대한 제한된 지원
Java의 제네릭은 int 또는 double과 같은 기본 유형을 직접 지원하지 않습니다. 대신 Integer 또는 Double과 같은 해당 래퍼 클래스를 사용해야 합니다. 이는 기본 유형을 직접 작업하는 것보다 효율성이 떨어질 수 있습니다.
복잡성
복합 유형 계층 및 와일드카드 유형을 사용하는 코드에 복잡성을 추가할 수 있습니다.