Reference/Effective-Java

    [Effective-Java] Chapter7 #46. 스트림에서는 부작용 없는 함수를 사용하라

    📌 Stream, 함수형 프로그래밍 그리고 순수 함수 Stream을 이해하고 싶다면 함수형 프로그래밍 패러다임까지 받아들여라 스트림 패러다임 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 부분이다. 각 변환 단계는 가능한 한 이전 단계의 결과를 받아 처리하는 순수 함수여야 한다. 오직 입력만이 결과에 영향을 주는 함수 다른 가변 상태를 참조하지 않고, 함수 스스로도 외부 상태를 변경하지 않는다. 즉, 함수는 입력값에 의존하여 항상 동일한 결과만을 내놓아야 한다. 이를 보장하기 위해서는 스트림 연산에 건네는 함수 객체는 모두 side-effect가 없어야 한다. ✒️ Stream API 1. Java Stream API • 컬렉션에 저장되어 있는 element들을 추상화시키고, 간단..

    [Effective-Java] Chapter7 #45. 스트림은 주의해서 사용하라

    💡 스트림과 반복 중 어느 쪽이 나은지 확신하기 어렵다면 둘 다 해보고 나은 쪽을 택하라 📌 Stream API 다량의 데이터 처리 작업(순차 혹은 병렬)을 돕고자 자바 8에 추가되었다. collection.stream() // 소스 스트림 .filter(x -> x.flag == true) // 중간 연산 .count(); // 종단 연산 stream 데이터 원소의 유한 혹은 무한 시퀀스(sequence) 스트림 원소는 컬렉션, 배열, 파일, 정규표현식 패턴 매처(matcher), 난수 생성기, 혹은 다른 스트림 등 어디로부터든 올 수 있다. 일반적인 stream은 객체 참조에 대한 Stream 기본 타입 값으로 int, long, double 세 가지를 지원 (intStream, longStream,..

    [Effective-Java] Chapter7 #44. 표준 함수형 인터페이스를 사용하라

    자바가 람다를 지원하면서 API 작성 모범 사례가 크게 바뀌었다. 기존 템플릿 메서드 패턴에서 함수 객체를 매개변수로 받는 생성자와 메서드를 더 많이 만드는 것이 좋다. 📌 As-is. Templete method pattern [Effective-Java] Chapter4 #20. 추상 클래스보다는 인터페이스를 우선하라 자바가 제공하는 다중 구현 메커니즘으로 interface와 abstract class가 존재한다. 자바 8부터는 인터페이스에 default method를 지원하여 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다 jaeseo0519.tistory.com LinkedHashMap을 이용해서 Cache를 구현해보자. public class Cache extends Linked..

    [Effective-Java] Chapter7 #43. 람다보다는 메서드 참조를 사용하라

    💡 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고, 그렇지 않을 때는 람다를 사용하라 📌 메서드 참조(method reference) List people = Arrays.asList(new Person("안OO"), new Person("조OO"), new Person("양OO"), new Person("안OO")); 위 코드처럼 여러 사람이 있을 때, 이름을 key로 하는 사람 수 value를 나타내는 Map을 구해보자. Map counts = new HashMap(); for (Person person : people) { counts.merge(person.getName(), 1, (existingValue, providedValue) -> existingValue + providedVal..