본문 바로가기

JAVA/[JAVA] Stream8

Optional Stream의 종결처리 부분을 이해하기 위해선 Optional대한 이해가 필수적이며 Optional은 대한 이해는 범용적으로 필수적이다. NPE는 Null 상태인 오브젝트를 참조할 때 발생합니다. 이는 언체크 예외를 반환하기 때문에 런타임에 발생합니다. 따라서 컴파일 시점에 발견할 수 없습니다. Optional Class는 Null일수도 아닐 수도 있는 Object를 담은 객체입니다. Optional을 만들기 위해선 다음과 같은 static method를 사용할 수 있습니다. public static Optional of(T value); public static Optional empty(); public static Optional ofNullable(T value); static 키워드로 선언된 메.. 2022. 10. 12.
[Java] Functional extends 자바에서도 렉시컬 스코프가 존재한다. 내부 함수가 존재하는 한 렉시컬 스코프가 존재하며 외부 함수 변수 또한 포함되어 있다. 이렇게 생성 당시의 환경을 가진 함수를 클로저라 한다. 이때 외부 함수의 변수들은 암묵적으로 final로 취급된다. 이 개념을 응용한 것이 Curry이다. 여러 개의 매개변수를 받는 함수를 중첩된 여러 개의 함수로 쪼개어 매개 변수를 한 번에 받지 않고 여러 단계에 걸쳐서 나누어 받을 수 있게 하는 기술입니다. Function curryAdd = x -> y -> x + y; Function addThree = curryAdd.apply(3); Integer result = addThree.apply(10);​ addThree는 3이라는 값을 항상 기억하고 있다가. 다음 apply.. 2022. 2. 17.
Stream (3) 1. groupingBy groupingBy는 Stream 안의 데이터에 classifier를 적용했을 때 동일한 값끼리 List로 모아서 Map의 형태로 변환해주는 Collector의 메서드이다. public static Collector groupingBy(Function 2022. 2. 16.
Stream (2) Optional과 Java.util.Function 패키지의 인터페이스들, Stream의 생성을 공부했다. 이를 통해 스트림 초기화 과정과 중간 처리 부분을 배우고 종결처리에 필요한 Optional을 배웠으니 Stream의 종결처리 메서드들을 알아보자. 1. All Match / Any Match boolean allMatch(Predicate 2022. 2. 15.
Stream Stream은 Functional Interface와 함께 자바 8에 추가되었다. Stream은 함수형 인터페이스를 적극 활용해 데이터 가공을 쉽게 할 수 있도록 도와줄 수 있다. 자바로 개발을 하다 보면 Collection을 많이 사용하며 해당 Collection들을 가공하는 부분이 상당히 많다. Stream을 사용하면 기존 loop 형식의 코드를 람다를 이용해 직관적이고 쉽게 처리가 가능하다. 이번에는 Stream Interface에 있는 메서드들의 종류와 활용을 공부해보자. 1. Stream.of() @SafeVarargs @SuppressWarnings("varargs") // Creating a stream from an array is safe public static Stream of(T.... 2022. 2. 12.
Method Reference 기존에 이미 선언되어 있는 메서드를 지정하여 인자로 넘기고 싶을 때 사용. :: 오퍼레이터 사용 사용할 메서드의 매개변수 타입과 리턴 타입을 숙지해야 생략되었을 때 혼동이 없다. 자바의 메서드 레퍼런스는 기존에 작성된 메서드를 함수형 인터페이스로 활용하기 위해 제공되는 문법처럼 느껴진다. 기존에 OOP로 작성된 코드를 혹은 패키지에 제공되는 메서드를 코드의 변경 없이 함수형 인터페이스로 변환해 사용할 수 있도록 제공해주는 것 같다. 또한 어느 정도의 자바에 익숙한 개발자여야 한다. java.util.function에 정의된 여러 함수형 인터페이스로 변환하기 위해선 기존 사용되던 메서드의 반환 타입, 파라미터의 타입을 숙지하여야 능동적으로 사용할 수 있을 것이다. 1. 클래스의 static method를 .. 2022. 2. 9.
Functional Interface (2) Functional Interface에서 자주 사용되는 몇 가지 함수형 인터페이스를 알아보자. Supplier Consumer Predicate Comparator 1. Supplier 공급자라는 뜻을 가지고 있는 Supplier는 input값을 받지 않고 리턴 값만 존재하는 함수형 인터페이스이다. @FunctionalInterface public interface Supplier { /** * Gets a result. * * @return a result */ T get(); } 이 함수형 인터페이스에는 추상 메서드인 get()이 존재하고 인자는 없고 리턴 값만 존재한다. 함수형 프로그래밍에서 함수는 1급 시민이기 때문에 인자로 사용이 가능하다. 이 Supplier를 사용해 인자를 주지않고 새로운 값.. 2022. 2. 8.
Functional Interface (1) 자바는 여전히 OOP를 지원하는 명령형 프로그래밍 언어지만 흐름에 맞게 함수형 프로그래밍도 지원한다. 선언형 프로그래밍은 무엇을 해야 하는지에 따라 문제를 해결하는 방식으로 기존 명령형 프로그래밍과 다른 문제 해결 방식을 보인다. 이러한 선언형 프로그래밍으로 문제를 해결하는 방법을 공부하기 위해 자바 8에서 지원하는 java.util.function 패키지의 인터페이스를 공부해보고 명령형으로 처리하면 가독성이 떨어지고 확장성이 떨어지는 문제들을 선언형 프로그래밍으로 언제든 구현할 수 있도록 준비해보자. 선언형 프로그래밍을 공부하는 과정에서 JS에 관한 지식이 있다면 한결 부드럽게 다가갈 수 있다. 자바스크립트의 함수는 1급 시민으로 함수를 변수에 할당할 수 있으며, 함수를 매개변수로 넘겨줄 수 있고, 리.. 2022. 2. 7.