PHpullh
학습 라이브러리/Java/와일드카드 심화 (PECS)

JAVA · 람다/메서드

와일드카드 심화 (PECS)

? extends T? super T의 차이, PECS 원칙을 마스터합니다.

람다/메서드고급wildcardPECSextendssuper

핵심 설명

? extends T? super T의 차이, PECS 원칙을 마스터합니다.

Java code

import java.util.*;

public class WildcardPECS {
    // Producer Extends — 데이터를 꺼내기만
    static double sum(List<? extends Number> list) {
        double total = 0;
        for (Number n : list) {
            total += n.doubleValue();
        }
        return total;
    }

    // Consumer Super — 데이터를 넣기만
    static void fill(List<? super Integer> list, int count) {
        for (int i = 0; i < count; i++) {
            list.add(i);
        }
    }

    // 복합: 소스에서 읽고 대상에 쓰기
    static <T> void copy(List<? extends T> src,
                         List<? super T> dest) {
        for (T item : src) {
            dest.add(item);
        }
    }

    public static void main(String[] args) {
        List<Integer> ints = List.of(1, 2, 3);
        List<Double> doubles = List.of(1.1, 2.2);
        System.out.println(sum(ints));    // 6.0
        System.out.println(sum(doubles)); // 3.3

        List<Number> nums = new ArrayList<>();
        fill(nums, 5);
        copy(ints, nums);
        System.out.println(nums);
    }
}

학습 팁

PECS: Producer-Extends, Consumer-Super. 데이터를 읽으면 extends, 쓰면 super를 사용합니다.

주의할 점

List에 원소를 추가할 수 없습니다. 컴파일러가 정확한 타입을 모르기 때문입니다.

자주 묻는 질문

와일드카드 심화 (PECS)란 무엇인가요?

? extends T 와 ? super T 의 차이, PECS 원칙을 마스터합니다.

와일드카드 심화 (PECS) 학습 시 주의할 점은 무엇인가요?

List 에 원소를 추가할 수 없습니다. 컴파일러가 정확한 타입을 모르기 때문입니다.