티스토리 뷰

Java

람다와 스트림의 정의

lkh's 2018. 11. 14. 01:01

1. 람다식이란.?


최근에 함수적 프로그래밍은 병렬처리와 이벤트 지향 프로그래밍에 적합하기 때문에 객체지향 프로그래밍과 함수적 프로그래밍을 혼합함으로써 효율적인

프로그래밍이 될 수 있고록 프로그램 개발 언어가 변하고 있다. 함수적 프로그래밍을 사용하지 않으면, 이벤트 핸들러를 작성할 때 익명 내부 클래스로 인해

코드의 복잡성과 가독성 문제가 있었는데 이를 해결 할 수 있다. 자바는 함수적 프로그래밍을 지원하기 위해 자바 8부터 람다식을 지원하고 있다.


하지만, 개인적으로 람다식의 가장 큰 장점은 매개변수로 값 뿐만 아니라 값을 처리하는 방식도 전달할 수 있다는 것이다. 메소드에 대한 추상화가 가능해지고,

이를 통해 메소드의 재사용과 확장성을 극대화할 수 있는 장점이라고 생각한다.


마지막으로, 람다식을 한줄로 정의하자면, 매개변수를 가진 코드블록이다.


2. 스트림이란.?


스트림이란, 컬렉션의 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 제공해주는 반복자이다. 

람다식과 스트림에는 공통적인 장점이 많다. 그 이뉴는 결국 스트림을 처리할 수 있는 방법을 람다식에서 정의하고 있기 때문이다. 

람다식의 장점이 너무 간략하다고 생각하면 아래 장점을 천천히 읽어보자.


 (1) 람다식으로 처리코드를 제공한다.

  람다식 또는 메소드 참조(예 : System.out::println)를 이용해서 컬렉션의 처리 방식을 매개변수 값으로 전달이 가능하다.


 (2) 내부 반복자를 사용하므로 병렬처리가 쉽다.

  외부반복자란 개발자가 코드로 직접 컬렉션의 요소를 반복해서 가져오는 코드의 패턴을 의미한다. 쉽게 말해서 for 반복문을 통해 list의 값을 하나씩 가져오는

  방식을 의미한다. 반면에, 내부반복자는 컬렉션 내부에서 요소들을 반복시키고, 개발자는 컬렉션 내부에서 요소들을 처리하는 로직만 전달하는 방식 의미한다.

  멀티코어에서 각 각의 요소들을 분배해서 병렬작업을 수행할 수 있게 지원해주기 때문에 하니씩 순차적으로 처리하는 외부반복자보다 효율적으로 컬렉션의 

  요소를 처리할 수 있다. 예를들어 리스트 컬렉션의 모든 값들을 더하는 로직을 구할 때, 외부반복자는 'index = 0 ~ index = list.size() - 1' 까지 모든 데이터를

  읽어서 순차적으로 더할 것이다. 하지만, 스트림은 컬렉션 내부의 요소들을 각각의 스레드에 분배하여, 최종적으로 각각의 스레드에서 더한 부분값을 합하여

  최종 결과값을 계산하기 때문에 효율적이다. 


 (3) 간결한 코드

  스트림은 평균, 합, 필터, 형변환, 정렬 등 다양한 기능을 제공할 뿐만 아니라 스트림을 통해 구현을 하면 같은 기능을 제공하는 코드라도 훨씬 간결하다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함