본문 바로가기
언어/JAVA

[Java] PECS(Producer-Extends, Consumer-Super) 공식

by minhyeok.lee 2023. 2. 14.
반응형

Generics PECS(Producer-Extends, Consumer-Super), 생산자-extends, 소비자-super

 * 제네릭이란?

2023.02.13 - [언어/JAVA] - [Java] 제네릭(Generic)

 

[Java] 제네릭(Generic)

제네릭 = 데이터 타입을 일반화한다, 클래스나 메소드에서 사용하는 내부의 타입을 외부에서 지정해주는 기법 제네릭 클래스 클래스 선언에 타입 매개변수가 쓰이면 이를 제네릭 클래스라 한다

kfdd6630.tistory.com

 

PECS란?

Producer-Extends, Consumer-Super의 줄임말이다. 

Collection으로부터 와일드카드 타입의 객체를 생성 만들면(produce) extends를 사용한다.

가지고 있는 객체를 Collection에 사용 또는 소비(consumer)하면 super를 사용한다.

 

생성은 꺼내서 Collection 만드는 것이기 때문에 Get = extends이다.

소비는 객체를 꺼내서 Collection에 사용한다는 의미에서 Add = super이다.

 

void printCollection(Collection<? extends B> collection) {
    for (B e : collection) {
        System.out.println(e);
    }
}

void addElement(Collection<? super B> collection) {
    collection.add(new B());
}

Producer - Extends

extends = printCollection 같은 경우에는 Collection으로부터 원소들을 꺼내면서 와일드카드 타입 객체를 생성(produce)하고 있다.

 

Consumer - Super

super = addElement의 경우에는 Collection에 해당 타입의 원소를 추가함으로써 객체를 사용(consume)하고 있다.

 

결론:

와일드카드 타입의 객체를 produce하는 printCollection은 extends를 사용하는 것이 적합하다.

와일드카드 타입의 객체를 consume하는 addElement에는 super를 사용하는 것이 적합하다.

 

 

와일드카드란?

2023.02.13 - [언어/JAVA] - [Java] 와일드카드 <?>

 

[Java] 와일드카드 <?>

와일드카드의 종류에는 1. 비경계, 2. 한정적(상한,하한 경계) 와일드 카드가 있다. 비경계 와일드카드(Unbounded Wildcards) - ?의 형태로 사용한다. - 기본적으로 와일드카드는 정해지지 않은 unknown type

kfdd6630.tistory.com

 

반응형

'언어 > JAVA' 카테고리의 다른 글

[Java] 와일드카드 <?>  (0) 2023.02.13
[Java] 제네릭(Generic)  (0) 2023.02.13
[Java] 출력 3가지 방법  (0) 2023.02.01
[Java] 입력 3가지 방법  (0) 2023.02.01

댓글