본문 바로가기

Programming Language/Java15

[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.
[Java] Equals vs Hashcode 그리고 재정의 Java에서 equals()와 hashcode() 없이는 상당히 많은 if 문을 객체의 모든 field를 비교하기 위해서 사용해야 한다. Java에서 equals()와 hashcode()를 언제 재정의 해야 하는지 그리고 재정의 하는 것과 하지 않는 것에 는 어떤 차이가 존재하는지 확인하허며 Java에서 객체 비교를 효율적이고 쉽게 해주는 equals와 hashcode()에 대해서 공부해 보자. equals()와 hashcode()에 대해서 🚀 Overrding equals() and hashcode() in Java equals()와 hashcode()는 모든 Java 객체의 상위 클래스인 Object Class에 정의되어 있다. 모든 java class는 equals()와 hashcode()를 포함하.. 2023. 1. 8.