정리

Collection 인터페이스는 Iterable 의 하위타입이고 stream 메서드도 제공하니 방복과 스트림을 동시에 지원한다. 따라서 원소 시퀀스를 반환하는 공개 API 의 반환타입에는 Collection 이다 그 하위 타입을 쓰는 게 일반적으로는 최선이다. 단지 컬렉션을 반환한다는 이유로 덩치 큰 시퀀스를 메모리에 올려스는 안된다.

핵심정리

원소 시퀀스를 반환하는 메서드를 작성할 때는, 이를 스트림으로 처리하기를 원하는 사용자와 반복으로 처리하길 원하는 사용자가 모두 있을 수 있음을 떠올리고, 양쪽을 다 만족시키려 노력하자. 컬렉션을 반환할 수 있다면 그렇게 하라. 반환 전부터 이미 원소들을 컬렉션에 담아 관리하고 있거나 컬렉션을 하나 더 만들어도 될 정도로 원소 개수가 적다면 ArrayList 같은 표준 컬렉션에 담아 반환하라. 그렇지 않으면 앞서의 멱집합 예처럼 전용 컬렉션을 구현할지 고민하라. 컬렉션을 반환하는 게 불가능 하면 스트림과 Iterable 중 더 자연스러운 것을 반환하라. 만약 나중에 Stream 인터페으시가 Iterable 을 지원하도록 자바가 수정된다면, 그 때는 안심하고 스트림을 반환하면 될것이다.