본문 바로가기
728x90

스트림4

9장. 리팩터링, 테스팅, 디버깅 이번 장에서는 기존 코드를 이용해 새로운 프로젝트를 시작하는 상황을 가정한다. 그 후 람다를 이용해 가독성과 유연성을 높이면서 기존 코드를 리팩토링 하는 방법을 소개한다. 가독성과 유연성을 개선하는 리팩터링 람다, 메서드 참조, 스트림 등을 이용해 가독성이 높고 유연한 코드로 리팩터링 하는 과정을 살펴보자 코드 가독성 개선 코드 가독성이 개선되면 다른 사람이 코드를 이해하기 쉬워지고 유지보수 할 수 있게 된다. 자바 8의 새로운 기능을 사용하면 코드가 간결하면서도 이해하기 쉬워진다. 익명 클래스를 람다 표현식으로 리팩터링하기 추상 메서드를 구현하는 익명 클래스를 람다로 리팩터링 할 수 있지만 모든 경우에 적용할 수 있는 것은 아니다. 다음과 같은 경우 람다로 변환할 수 없다. 1. 익명 클래스에서 thi.. 2022. 3. 17.
Item 46. 스트림에서는 부작용 없는 함수를 사용하라 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 여기서 각 변환은 가능한 이전 단계의 결과를 받아서 처리하는 순수 함수여야 한다. 이를 위해서는 스트림 연산에 건네는 함수 객체는 모두 side-effect가 없어야 한다. 아래의 예시를 보자. 1 2 3 4 5 6 7 Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }) } Colored by Color Scripter cs 이 코드는 스트림을 가장한 반복적 코드다. 위에서 명시했듯 스트림에서 사.. 2022. 3. 2.
4장 스트림 소개 많은 자바 애플리케이션에서 컬랙션을 사용한다. 하지만 컬랙션 관련 연산들은 연산을 통해 기대하는 것에 집중하기 보다는 구현을 어떻게 할지를 명시해야 한다. 또 한 많은 요소를 포함한 컬랙션을 처리할 경우 병렬 처리가 효과적이지만 병렬 처리 코드를 구성하는 것은 단순 반복 처리 코드에 비해 복잡하고 디버깅이 어렵다. 이런 문제들에 대한 해결책이 스트림이다. 스트림이란 무엇인가? 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있고 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 또 한 여러 빌딩 블록 연산을 연결해 복잡한 데이터 처리 파이프라인을 만들 수 있다. 연산이 복잡함에도 가독성은 유지된다. 스트림에서 filter 같은 연산은 고수준 빌딩 블록(high-level.. 2022. 2. 16.
1장 - 자바 8, 9, 10, 11: 무슨 일이 일어나고 있는가. 스트림 처리 스트림은 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 자바 8에는 java.util.stream 패키지에 스트림 API가 추가되었다. 스트림 패키지에 정의된 Stream는 T 형식으로 구성된 일련의 항목을 의미한다. 스트림 API는 파이프라인을 만드는 데 필요한 메서드들을 제공한다. 스트림 API는 작업을 고수준으로 추상화해서 일련의 스트림으로 만들어 처리할 수 있다. 또 한 스트림 파이프라인을 이용해 입력 부분을 여려 CPU 코어에 쉽게 할당할 수 있다. 스레드라는 복잡한 작업을 사용하지 않고도 병렬성을 얻을 수 있다. 스트림 API는 연산의 동작을 파라미터화할 수 있는 코드를 전달한다는 사상에 기초한다. 동작 파라미터화(behavior parameterization)로.. 2022. 2. 12.
728x90