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 |
댓글