Java / / 2024. 7. 17. 10:25

와일드카드와 제네릭: 자바에서의 유연성과 타입 안전성

와일드카드 사용법과 제네릭 프로그래밍에서의 역할 🌟

 

와일드카드는 자바 제네릭 프로그래밍에서 강력한 도구로, 다양한 타입을 처리하는 유연한 메서드와 클래스 작성에 도움을 줍니다. 여기에서는 상한 와일드카드, 하한 와일드카드, 와일드카드 캡처 등의 주요 개념을 설명하고, 이러한 와일드카드가 어떻게 사용되는지 알아보겠습니다.

 

1. 상한 와일드카드 (Upper Bounded Wildcards) ⬆️

 

상한 와일드카드를 사용하면 특정 타입의 상위 클래스나 인터페이스를 상속받은 타입만을 허용할 수 있습니다. 예를 들어, List<? extends Number>List<Integer>, List<Double>, List<Float>Number의 하위 클래스들에 대해 작동할 수 있습니다. 이렇게 하면 메서드가 더 유연해져 여러 타입의 데이터를 처리할 수 있게 됩니다.

public void processNumbers(List<? extends Number> numbers) {
    for (Number number : numbers) {
        System.out.println(number);
    }
}

 

이 메서드는 List<Integer>, List<Double> 등을 인자로 받아 처리할 수 있습니다.

 

2. 하한 와일드카드 (Lower Bounded Wildcards) ⬇️

 

하한 와일드카드는 특정 타입의 하위 클래스나 인터페이스를 상속받은 타입만을 허용합니다. 예를 들어, List<? super Integer>Integer, Number, Object 타입의 리스트에 대해 작동할 수 있습니다.

public void addNumbers(List<? super Integer> list) {
    list.add(100);
    list.add(200);
}

이 메서드는 List<Integer>, List<Number>, List<Object>에 값을 추가할 수 있습니다.

 

3. 제한되지 않은 와일드카드 (Unbounded Wildcards) ❓

 

제한되지 않은 와일드카드는 타입이 명확하지 않거나 중요하지 않을 때 사용됩니다. 예를 들어, List<?>는 어떤 타입의 리스트든 받을 수 있으며, 이 경우 주로 데이터의 변경보다는 읽기 작업에 사용됩니다.

public void printList(List<?> list) {
    for (Object elem : list) {
        System.out.println(elem);
    }
}

 

이 메서드는 List<String>, List<Integer>, List<Double> 등 모든 타입의 리스트를 받아 출력할 수 있습니다.

 

4. 와일드카드 캡처와 헬퍼 메서드 (Wildcard Capture and Helper Methods) 🛠️

 

때로는 와일드카드 타입을 유추해야 할 때가 있습니다. 예를 들어, List<?>로 정의된 리스트에 값을 추가하려면, 와일드카드 타입을 특정 타입으로 “캡처”하는 헬퍼 메서드를 사용해야 합니다.

public void swapFirst(List<?> list) {
    swapHelper(list);
}

private <T> void swapHelper(List<T> list) {
    T temp = list.get(0);
    list.set(0, list.get(1));
    list.set(1, temp);
}

 

이 패턴은 와일드카드와 제네릭을 사용할 때 발생하는 타입 불확정성을 해결하는 좋은 방법입니다.

 

자바 애노테이션: 코드의 메타데이터 📌

 

자바 애노테이션은 코드에 추가적인 정보를 제공하는 메타데이터로, 컴파일러나 런타임 환경에서 특별한 처리를 할 수 있게 합니다. 다음은 자주 사용되는 기본 애노테이션입니다:

 

@Override: 메서드가 슈퍼클래스의 메서드를 오버라이드함을 나타냅니다.

@Deprecated: 해당 요소가 더 이상 사용되지 않음을 나타내며, 사용을 자제하도록 경고합니다.

@SuppressWarnings: 컴파일러 경고를 무시하도록 합니다.

 

애노테이션을 적절히 사용하면 코드의 가독성을 높이고 유지보수를 쉽게 만들 수 있습니다.

 

이와 같은 와일드카드와 제네릭 기능을 활용하면 자바에서 더욱 유연하고 타입 안전한 코드를 작성할 수 있습니다. 🌱

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유