EffectiveJava3 [Effective Java] 반환 타입으로는 Stream 보다 Collection이 낫다. (item 47) Stream에서는 반복을 지원하지 않기 때문에 API에서 Stream만 반환하도록 한다면 반복과 stream을 잘 시기적절하게 사용하기를 원하는 사용자는 불만을 토로할 수 있다. Stream을 사용할 수도 반복을 사용할 수도 있게 지원해야 한다. Stream과 iterator Stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함하고 정의한 방식대로 동작하나 for-each로 stream을 반복할 수 없는 이유는 Stream이 Iterable을 extend 하지 않아서 이다. 실제로 BaseStream을 열어보면 iterator메서드가 들어있다. 하지만 반복문에서 활용하면 컴파일 에러가 발생한다. 메서드 참조를 매개변수화된 Iterable로 적절히 형변환 해줘야 한다. St.. 2023. 1. 13. [Effective Java] Stream에서는 부작용 없는 함수를 사용하라. (item 46) Effective Java item 46 스트림(Stream)에서는 부작용 없는 함수를 사용하라에서의 부작용 없는 함수와 어떤 함수를 사용하기를 권장하는지 확인해보도록 하겠습니다. stream과 부작용 없는 함수 stream은 새로 추가된 또 하나의 API가 아닌 함수형 프로그래밍에 기초한 패러다임이기 때문에 장점이 무엇인지 쉽게 와닿지 않을 수도 있습니다. Stream 패러다임에 핵심은 계산 로직을 일련의 변환(transformation)으로 재구성하는 부분입니다. 각 변환 단계는 가변 상태를 참조하지 않고 오로지 입력값에만 영향을 받는 순수함수로 이루어져 이전 단계의 결과를 받아 처리해야 합니다. 이 핵심을 지키려면 stream 연산 내에 건네는 함수 객체는 모두 함수가 결과값 이외에 다른 상태를 변.. 2023. 1. 12. [Effective Java] Stream은 주의해서 사용해라(Item 45) Effective Java에서 말하는 Stream 사용시 주의 사항에 대해서 확인해보도록 하겠습니다. Stream과 관련된 Effective Java Item 45~48까지 학습한 것에 대한 포스팅을 이어서 하겠습니다. Stream을 과용하는 것을 피하자 프로그램이 읽거나 유지 보수하기 어려워진다 아나그램 예시 아나그램(anagram) : 알파벳이 같고 순서만 다른 단어를 말한다. ex) staple , aelpst, petals, aelpst → 아나그램 그룹 ❌ 스트림을 과용하여 코드 가독성을 떨어트리고 유지 보수 비용을 늘리는 케이스 예시 public class StreamAnagrams { public static void main(String[] args) throws IOException { .. 2023. 1. 12. 이전 1 다음