용어를 외웠는지가 아니라, 읽기·쓰기 방향을 보고 extends/super 중 어느 쪽을 쓸지 PECS로 설명할 수 있는지 가르려는 질문이다.
자바 제네릭은 기본 무공변이라 List<Parent>와 List<Child>는 서로 대입되지 않는다. 더 유연하게 쓰려면 와일드카드 경계를 쓰는데, <? extends T>는 T와 그 자손을 받아 와 '읽기는 자유, 쓰기는 제한'이 되고, <? super T>는 T와 그 조상까지 허용해 'T 또는 자손을 쓰는 건 자유, 읽기는 Object로만'이 된다. 이 두 방향을 한 문장으로 정리한 게 PECS(Producer Extends, Consumer Super)다. 비슷해 보이는 <?>는 임의 타입 읽기 전용 성격이고 <Object>는 Object만 받는 구체 타입이라 자리가 다르다.
유틸 메서드 시그니처에서 PECS를 적용해 호출자 편의를 늘려 본 경험이 있다면 변성 설계 사례로 연결할 수 있다
<? extends T> 시그니처에 add를 시도하다 막혀 본 경험이 있다면 읽기·쓰기 방향 직관으로 엮을 수 있다
공개 API의 변성 경계를 단순화해 사용성을 끌어올린 적이 있다면 라이브러리 설계 관점으로 말할 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.