본문 바로가기

분류 전체보기56

[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.
[Java] Stream (Stream이 밀려온다) Java8 에서 추가된 스트림(Stream)에 대해서 스트림(stream), 스트림 파이프라인(stream pipe line), 스트림 연산자(stream operator), 스트림 병렬 처리 (parall stream)등을 특징들과 함게 살펴보도록 하겠습니다. Stream API Stream API는 순차적 or 병렬적으로 다량의 데이터 처리 작업을 돕고자 Java8에 추가되었습니다. 이 Stream API가 제공하는 추상 개념 중 핵심적인 것은 두 가지입니다. 1. 스트림(Stream) 데이터의 유한 혹은 무한한 일련의 시퀀스를 의미합니다. Stream으로 넘어온 데이터를 Stream으로 이어받아서 유한하게 처리하거나 무제한으로 처리가 가능합니다. 2. 스트림 파이프라인(Stream Pipe Line.. 2023. 1. 9.
[Java] 람다(Lambda)를 소화시켜 보자 서론 저번 함수형인터페이스(functional interface)에 이어서 Lambda Expression(람다식)에 대해서 학습한 것에 대해 포스팅을 하려고 합니다. 람다식, 함수형 프로그래밍, 람다 이전 익명클래스, 변수 캡처에 따른 쉐도잉, 메서드 래퍼런스 순으로 알아보도록 하겠습니다. Lambda Expression 람다식(Lambda Expression)이란? 메서드를 하나의 식(expression)으로 표현한 것. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 람다식을 익명 함수(anonymous function)라고도 한다. 람다 형식. (인자리스트) -> 바디 단 단일 실행문일 경우 {} 함수 몸체 괄호를 생략할 수 있습니다. 예시 Supplier get10 = () ->.. 2023. 1. 8.
[Java] Functional Interface(함수형 인터페이스) Java - Lambda Expression에 관하여 블로그 글을 작성하려고 보니 함수형 인터페이스(functional interface)도 긴밀하게 엮여있어 하나의 글로 작성을 하기엔 너무 길고 가독성도 떨어질 것 같아 lambda 이전에 functional interface에 관한 글을 선행하여 작성하려고 합니다. Java8에서 추가된 Functional Interface에 대해서 알아봅시다 🧐예제를 최대한 많이 넣으려고 했습니다!. Functional Interface란? Functional Interface란 Object Class의 메서드를 제외하고 '구현해야 할 추상 메서드가 하나만 정의된 인터페이스'를 의미합니다. 예시 코드 //Functional Interface인 경우: 메서드가 하나만 .. 2023. 1. 8.