> Java > java지도 시간 > Java Generics 마스터하기: 코드 예제가 포함된 종합 가이드

Java Generics 마스터하기: 코드 예제가 포함된 종합 가이드

Linda Hamilton
풀어 주다: 2025-01-07 06:27:49
원래의
728명이 탐색했습니다.

1. Java Generics의 기본 이해

Mastering Java Generics: A Comprehensive Guide with Code Examples

Java Generics를 사용하면 유형 매개변수를 사용하여 클래스, 인터페이스 및 메소드를 정의할 수 있습니다. 이는 컴파일 타임에 유형 안전성을 보장하면서 다양한 데이터 유형과 작동하는 코드를 작성할 수 있음을 의미합니다.

1.1 제네릭이란 무엇입니까?

제네릭은 작동하는 데이터 유형에 대한 자리 표시자를 사용하여 클래스, 인터페이스 또는 메소드를 정의할 수 있도록 Java 5에 도입된 기능입니다. 이는 컴파일 시간 유형 안전성을 제공하면서 모든 유형에서 작동할 수 있는 클래스 및 메소드를 작성하는 데 도움이 됩니다.

예:

public class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}
로그인 후 복사
로그인 후 복사

이 예에서 TBox의 인스턴스를 생성할 때 모든 데이터 유형으로 대체될 수 있는 유형 매개변수입니다.

1.2 왜 Generic을 사용하는가?

제네릭은 여러 가지 이점을 제공합니다.

  • 유형 안전성: 컴파일 타임에 유형 불일치를 포착하여 캐스팅이 필요 없으며 런타임 오류를 줄입니다.
  • 코드 재사용성: 다양한 데이터 유형을 처리할 수 있는 단일 클래스나 메서드를 만들 수 있습니다.
  • 형변환 제거: 제네릭을 사용하면 유형 형변환의 필요성이 줄어들어 코드가 더 깔끔하고 오류 발생 가능성이 줄어듭니다.

예:

제네릭 제외:

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
로그인 후 복사
로그인 후 복사

2. 클래스에서 제네릭 작업

유형 안전성과 유연성을 보장하기 위해 제네릭을 클래스와 함께 사용할 수 있습니다. 클래스 정의에서 제네릭을 효과적으로 사용하는 방법은 다음과 같습니다.

2.1 일반 클래스 예

다른 유형의 두 값을 보유하는 일반 클래스 쌍을 생각해 보세요.

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());
로그인 후 복사

2.2 제한된 유형 매개변수

때때로 일반 클래스나 메서드와 함께 사용할 수 있는 유형을 제한하고 싶을 수도 있습니다. 제한된 유형 매개변수를 사용하면 허용되는 유형의 범위를 지정할 수 있습니다.

예:

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
로그인 후 복사

3. 메소드의 제네릭

제네릭은 클래스에만 국한되지 않습니다. 유연하고 형식이 안전한 메서드를 만들기 위해 메서드에 사용할 수도 있습니다.

3.1 일반적인 방법의 예

다음은 두 개의 값 중 최대값을 반환하는 메서드입니다.

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;
    }
}
로그인 후 복사
로그인 후 복사

3.2 제네릭의 와일드카드

와일드카드를 사용하면 허용되는 유형의 범위를 보다 유연하게 지정할 수 있습니다. 예를 들어, ? 확장 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
로그인 후 복사
로그인 후 복사

4. 결론

Java Generics를 마스터하면 코드의 유연성과 안전성이 크게 향상될 수 있습니다. 클래스, 메서드 및 와일드카드에서 제네릭을 사용하는 방법을 이해하면 더욱 강력하고 재사용 가능한 코드를 작성할 수 있습니다. 질문이 있거나 추가 설명이 필요한 경우 아래에 의견을 남겨주세요!

에서 더 많은 게시물을 읽어보세요. Java Generics 마스터하기: 코드 예제가 포함된 종합 가이드

위 내용은 Java Generics 마스터하기: 코드 예제가 포함된 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿