Java/Effective Java
-
[Effective Java] Item 46. 스트림에서는 부작용 없는 함수를 사용하라Java/Effective Java 2020. 9. 30. 12:47
Stream 스트림은 함수형 프로그래밍에 기초한 패러다임입니다. 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 부분입니다. 각 변환 단계는 가능한 한 이전 단게의 결과를 받아 처리하는 순수 함수여야 합니다. 순수 함수란 오직 입력만이 결과에 영향을 주는 함수를 말합니다. 다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않습니다. 이렇게 하려면 (중간 단계든 종단 단계든) 스트림 연산에 건네는 함수 객체는 모두 부작용(side effect)이 없어야 합니다. 다음의 예제는 단어별 수를 세어 빈도표를 만드는 코드입니다. 스트림을 이용하지 않은 코드 import java.util.HashMap; import java.util.List; import..
-
[Effective Java] Item 44. 표준 함수형 인터페이스를 사용하라Java/Effective Java 2020. 9. 27. 10:47
자바 8부터는 람다 지원을 위해 java.util.function 패키지에 표준 함수형 인터페이스를 다양하게 제공하고 있습니다. 필요한 용도에 맞는 게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하는 것이 좋습니다. 그러면 API가 다루는 개념의 수가 줄어들어 익히기 더 쉬워지게 됩니다. 또한 유용한 디폴트 메서드를 많이 제공하므로 다른 코드와의 상호운용성도 크게 좋아지게 됩니다. java.util.function 패키지에는 총 43개의 인터페이스가 담겨 있습니다. 이중에 기본 인터페이스 6개만 기억하면 나머지를 충분히 유추해 낼 수 있습니다. Operator : 인수가 1개인 UnaryOperator와 2개인 BinaryOperator로 나뉘며, 반환값과 인수의 타입이 같은 함수를 뜻합니..
-
[Effective Java] Item 42. 익명 클래스보다는 람다를 사용하라Java/Effective Java 2020. 9. 21. 23:24
자바 8 이전, 익명 클래스 자바 8 이전에는 함수 객체를 만드는 주요 수단은 익명 클래스였습니다. 하지만 익명 클래스 방식은 코드가 너무 길기 때문에 자바는 함수형 프로그래밍에 적합하지 않았습니다. 아래의 코드는 문자열을 길이 순으로 정렬하는데, 정렬을 위한 비교 함수로 익명 클래스를 사용하고 있습니다. import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) { List words = Arrays.asList("banana", "cat", "orange", "app..
-
[Effective Java] Item 37. ordinal 인덱싱 대신 EnumMap을 사용하라Java/Effective Java 2020. 9. 17. 16:06
public class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final LifeCycle lifeCycle; public Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return name; } } import java.util.HashSet; import java.util.List; import java.util.Set; public class OrdinalIndexingMain { public static void main(Str..