(collect vs collector vs collectors) vs (Collection vs Collections)

June·2022년 4월 7일
1

우테코

목록 보기
28/84

학습 배경

    public static List<Position> getPositionsByXAxis(XAxis xAxis) {
        return Arrays.stream(YAxis.values())
                .map(yAxis -> Position.from(xAxis, yAxis))
                .collect(Collectors.toList());
    }

스트림을 다루다보면 리스트로 반환하기 위해 collect(Collectors.toList())를 많이 쓴다.
이펙티브 자바에도 아이템 47. 반환 타입으로는 스트림보다 컬렉션이 낫다가 있다.

모던자바인액션 6장을 읽다보면 초반부에 collect, collector, collectors를 잘 구분하라는 말이 나온다. 의식적으로 구분하기 전에는 Collectors.toList()도 리스트를 반환하니 막연하게 Collection과 직접적 연관이 있는 것인줄 알았다.

collect vs collector vs collectors

  • collect: 스트림의 최종 연산 메서드 중 하나이다.
  • collector: Collect에서 필요한 메서드를 정의해놓은 인터페이스이다.
  • collectors: 복수형이 잘 나타내듯이 Collector를 구현한 클래스들을 제공한다.

그림 출처 블로그

위의 그림이 잘 요약해서 보여준다.

collectors

Collectors.toList()

Collector를 반환하는 것을 알 수 있다. 그래서 collect(Collectors.toList())를 하면 collect 메서드에 collector 인터페이스가 들어가는 것이다.

collector

Collector는 인터페이스로 다섯가지가 정의도ㅣ어 있다.

Collection vs Collections

  • Collections은 Collection Framework에서 최상위 인터페이스다.
  • Collections는 클래스다.

애초에 CollectionIterable을 상속받는 인터페이스고, CollectionsObject를 상속받는 클래스다. CollectionsCollection을 리턴하거나, Collection 인터페이스에서 동작하는 메소드를 모아놓은 클래스다.

궁금증

명사 단수형은 인터페이스이고, 거기에 복수형을 붙이면 구체클래스가 되는 것이 컨벤션인지.

2개의 댓글

comment-user-thumbnail
2022년 4월 7일

오 몰랐던 내용인데 감사합니다 👍

답글 달기
comment-user-thumbnail
2023년 1월 17일

Collections은 Collection Framework에서 최상위 인터페이스다
-> Collection은
글 잘 읽었습니다!

답글 달기