PECS

youngkyu MIn·2023년 10월 9일

PECS는 "Producer Extends, Consumer Super"의 약자
Java의 제네릭을 사용할 때 변성(variance)을 적용하는 흔한 규칙이다.

1 Producer Extends (PE)

"Producer Extends"는 데이터를 읽을 때 사용하는 제네릭 타입에는 extends를 사용해야 한다는 원칙이다.
즉, "생산자"는 extends를 사용한다.
이렇게 하면, 하위 타입의 객체를 읽을 때 유연성이 증가한다.

public <T> void processProducer(List<? extends T> producer) {
    for (T item : producer) {
        // Do something with item
    }
}

(받아 온 데이터를 이용해 뭔가를 produce 함)


2 Consumer Super (CS)

"Consumer Super"는 데이터를 쓸 때 사용하는 제네릭 타입에는 super를 사용해야 한다는 원칙이다.
즉, "소비자"는 super를 사용한다.
이를 통해, 다양한 타입의 객체를 안전하게 쓸 수 있다.

public <T> void processConsumer(List<? super T> consumer, T item) {
    consumer.add(item);
}

(받아 온 데이터에 나의 것을 consume 해서 무언가를 함)


PECS 원칙을 따르면, 메서드 파라미터로 넘겨지는 제네릭 타입이 생산자인지 소비자인지를 파악할 수 있고, 이에 따라 적합한 변성을 사용하여 메서드의 유연성을 높일 수 있다.

producer 와 consumer 의 개념이 일반적으로 생각하는 것과 반대다.

profile
한 줄 소개

0개의 댓글