[Java] Stream 예제
2022. 3. 23. 20:47
프로그래밍/JAVA
Stream을 활용한 예제 src/main/java/lambdasinaction/stream/ex1/Dish.java package lambdasinaction.stream.ex1; import java.util.*; public class Dish { private final String name; private final boolean vegetarian; private final int calories; private final Type type; public Dish(String name, boolean vegetarian, int calories, Type type) { this.name = name; this.vegetarian = vegetarian; this.calories = calori..
[Java] Stream 생성 방법
2022. 3. 22. 20:27
프로그래밍/JAVA
Stream 생성 방법 예제 // Stream의 static 메서드 of 사용 - Stream.of(data) Stream stream = Stream.of("Java", "Lambdas", "Stream", "Example"); // Stream의 static 메서드 iterate 사용 - Stream.iterate(seed, operator) Stream.iterate(0, n -> n + 2) .limit(10) .forEach(System.out::println); // Stream의 static 메서드 generate 사용 - Stream.generate(() -> T) Stream.generate(Math::random) .limit(10) .forEach(System.out::println)..
[Java] Collection과 Stream 비교
2022. 3. 21. 20:55
프로그래밍/JAVA
Collection과 Stream 비교 Collection Stream for(int n: numbers){ ... } numbers.forEach(n -> ...) 외부반복(External Iteration) 제어 흐름 중복 발생 효율적이고 직접적인 요소 처리 지저분한 코드 유한 데이터 구조 API 내부반복(Internal Iteration) 제어 흐름 추상화 파이프-필터 기반 API 함축적인 표현 무한 연속 데이터 흐름 API 공통점 컬렉션과 스트림 모두 연속된 요소 형식의 값을 저장하는 자료구조의 인터페이스를 제공 둘 다 순서에 따라 순차적으로 요소에 접근 차이점 Collection Stream 각 계산식을 만날 때 마다 데이터가 계산됨 최종 연산이 실행 될 때에 데이터가 계산됨 자료구조 이므로 데..
[Java] 스트림(Stream)의 특징
2022. 3. 18. 20:04
프로그래밍/JAVA
스트림(Stream)과 관련된 용어 리덕션(Reduction) ✔ 대량의 데이터를 가공해 축소 하는 것 ✔ 데이터의 합계 , 평균값 , 카운팅 , 최대값 , 최소값 ✔ 컬렉션의 요소를 리덕션의 결과물로 바로 집계할 수 없을 경우에는 ? : 집계하기 좋도록 필터링 , 매핑 , 정렬 , 그룹핑의 중간 처리가 필요함 ( 스트림 파이프라인 필요성 ) 파이프라인(Pipeline) ✔ 여러 개의 스트림이 연결 되어 있는 구조 ✔ 파이프라인에서 최종 처리를 제외 하고는 모두 중간 처리 스트림 스트림(Stream)의 작업흐름 1️⃣ 스트림을 생성 2️⃣ 초기 스트림을 다른 스트림으로 변환하는 중간 연산을 지정. 여러 단계가 될 수도 있음 3️⃣ 종료 연산을 적용해서 결과를 산출. 종료 연산은 앞에서 지연된 중간 연산이..
[Java] 스트림(Stream)이란 ?
2022. 3. 16. 20:33
프로그래밍/JAVA
스트림(Stream)의 정의 스트림은 Java8부터 추가된 컬렉션(배열 포함)의 저장 요소(Element)를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자 Stream 활용하기 클래식 자바 스타일 예시(컬렉션 활용)👇 List lowPriceProduct = new ArrayList(); // 가격이 9000원 이하인 상품만 가지고 옴 for(Product product : item) { if(store.getPrice() < 9000) { lowPriceProduct.add(product); } } // 가격 순으로 정렬 Collections.sort(lowPriceProduct, new Comparator() { @Override public int compare(Dish o1, Dish..
[Java] 함수형 인터페이스
2022. 3. 15. 20:00
프로그래밍/JAVA
함수형 인터페이스 하나의 추상 메서드를 가진 인터페이스만 람다식으로 사용 가능 👉 이러한 인터페이스를 함수형 인터페이스라고 함 익명 함수와 매개 변수만으로 구현되므로 단 하나의 메서드만을 가져야 함(두 개 이상의 메서드인 경우 어떤 메서드의 호출인지 모호해 짐) 하나의 abstract 메서드를 가지는 인터페이스 함수형 인터페이스 지정을 위해 @FunctionalInterface 이 도입됨 @FunctionalInterface 함수형 인터페이스라는 의미, 여러 개의 메서드를 선언하면 에러 @FunctionalInterface public interface Operator { public T operator(T op1, T op2); } 함수형 인터페이스 이해하기 ✔️ 람다와 익명 클래스는 다름 익명 클래스..
[Java] 람다식의 특징 및 장단점
2022. 3. 14. 20:10
프로그래밍/JAVA
람다식(Lambda Expression) 의 특징 1️⃣ 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주됨 2️⃣ 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없음 람다식(Lambda Expression) 의 장점 1️⃣ 코드를 간결하게 만들 수 있음 2️⃣ 식에 개발자의 의도가 명확히 드러나 가독성이 높아짐 3️⃣ 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아짐 4️⃣ 병렬프로그래밍이 용이 람다식(Lambda Expression) 의 단점 1️⃣ 람다를 사용하면서 만든 무명함수는 재사용이 불가능 2️⃣ 디버깅이 어려움 3️⃣ 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있음 4️⃣ 재귀로 만들경우에 부적합함
[Java] 람다식이란?
2022. 1. 28. 20:35
프로그래밍/JAVA
람다식 (lambda expression) 자바에서 함수형 프로그래밍을 구현하는 방식 자바 8부터 지원 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행 더보기 함수형 프로그래밍 순수 함수를 구현하고 호출함으로써 외부 자료에 부수적인 영향을 주지 않고 매개 변수만을 사용하도록 만든 함수 함수를 기반으로 구현 입력 받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리등에 가능 안정적인 확장성 있는 프로그래밍 방식 람다식 구현하기 익명 함수 만들기 매개 변수와 매개 변수를 활용한 실행문으로 구현 두 수를 입력 받아 더하는 add() 함수 int add(int x, int y) { return x + y; } // 람다식으로 표현 (int x, int y) -> {return x +y;} ..