Java Generics를 사용하면 유형 매개변수를 사용하여 클래스, 인터페이스 및 메소드를 정의할 수 있습니다. 이는 컴파일 타임에 유형 안전성을 보장하면서 다양한 데이터 유형과 작동하는 코드를 작성할 수 있음을 의미합니다.
제네릭은 작동하는 데이터 유형에 대한 자리 표시자를 사용하여 클래스, 인터페이스 또는 메소드를 정의할 수 있도록 Java 5에 도입된 기능입니다. 이는 컴파일 시간 유형 안전성을 제공하면서 모든 유형에서 작동할 수 있는 클래스 및 메소드를 작성하는 데 도움이 됩니다.
예:
public class Box<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } }
이 예에서 T는 Box의 인스턴스를 생성할 때 모든 데이터 유형으로 대체될 수 있는 유형 매개변수입니다.
제네릭은 여러 가지 이점을 제공합니다.
예:
제네릭 제외:
List list = new ArrayList(); list.add("Hello"); String s = (String) list.get(0); // Casting needed
제네릭 사용:
List<String> list = new ArrayList<>(); list.add("Hello"); String s = list.get(0); // No casting needed
유형 안전성과 유연성을 보장하기 위해 제네릭을 클래스와 함께 사용할 수 있습니다. 클래스 정의에서 제네릭을 효과적으로 사용하는 방법은 다음과 같습니다.
다른 유형의 두 값을 보유하는 일반 클래스 쌍을 생각해 보세요.
public class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } }
이 예에서 K와 V는 pair의 인스턴스를 생성할 때 지정할 수 있는 유형 매개변수입니다.
사용 예:
Pair<String, Integer> pair = new Pair<>("Age", 30); System.out.println("Key: " + pair.getKey() + ", Value: " + pair.getValue());
때때로 일반 클래스나 메서드와 함께 사용할 수 있는 유형을 제한하고 싶을 수도 있습니다. 제한된 유형 매개변수를 사용하면 허용되는 유형의 범위를 지정할 수 있습니다.
예:
public class NumberUtils { public static <T extends Number> void printNumber(T number) { System.out.println("Number: " + number); } }
여기서 T는 Integer, Double 등과 같은 Number의 하위 클래스로 제한됩니다.
사용 예:
NumberUtils.printNumber(10); // Valid NumberUtils.printNumber(10.5); // Valid
제네릭은 클래스에만 국한되지 않습니다. 유연하고 형식이 안전한 메서드를 만들기 위해 메서드에 사용할 수도 있습니다.
다음은 두 개의 값 중 최대값을 반환하는 메서드입니다.
public class Util { public static <T extends Comparable<T>> T max(T a, T b) { return a.compareTo(b) > 0 ? a : b; } }
이 방법에서 T는 T를 비교할 수 있도록 Comparable을 확장해야 하는 유형 매개변수입니다.
사용 예:
public class Box<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } }
와일드카드를 사용하면 허용되는 유형의 범위를 보다 유연하게 지정할 수 있습니다. 예를 들어, ? 확장 T는 T를 확장하는 알 수 없는 유형을 나타내고, ? super T는 T의 상위 유형인 알 수 없는 유형을 나타냅니다.
예:
List list = new ArrayList(); list.add("Hello"); String s = (String) list.get(0); // Casting needed
사용 예:
List<String> list = new ArrayList<>(); list.add("Hello"); String s = list.get(0); // No casting needed
Java Generics를 마스터하면 코드의 유연성과 안전성이 크게 향상될 수 있습니다. 클래스, 메서드 및 와일드카드에서 제네릭을 사용하는 방법을 이해하면 더욱 강력하고 재사용 가능한 코드를 작성할 수 있습니다. 질문이 있거나 추가 설명이 필요한 경우 아래에 의견을 남겨주세요!
에서 더 많은 게시물을 읽어보세요. Java Generics 마스터하기: 코드 예제가 포함된 종합 가이드
위 내용은 Java Generics 마스터하기: 코드 예제가 포함된 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!