람다식(lambda expression) 이란?
JAVA 8 부터 람다식(lambda expression) 이 추가 되었다.
람다식은 말그대로 표현방식 중 하나로 함수형 스타일이라고 할 수 있다.
함수형 스타일은 함수의 입력만을 의존하여 출력을 만드는 구조로 외부에 상태를 변경하는 것을 지양하는 패러다임으로 부작용(Side-effect) 발생을 최소화 하는 방법론이다.
요약하면 기존의 불필요한 코드를 줄이고 가독성을 향상시키는것에 목적을 두고 있습니다.
함수형 스타일을 이해하기 위해 기존 JAVA 코드(명령형 스타일)와 로 비교를 해보겠습니다.
names 라는 리스트에서 이름이 'S' 로 시작하는사람수를 구하는 소스를 보겠습니다.
기존 JAVA 코드 (명령형 스타일)
final List<String> names = Arrays.asList("Sehoon", "Songwoo", "Chan", "Youngsuk", "Dajung");
int foundCnt = 0; for(String name : names) { if(name.startsWith("S")) { foundCnt += 1; } }
System.out.println("이름이 S로 시작하는 사람은 몇명인가요? "+ foundCnt); |
람다식 (함수형 스타일)
final List<String> names = Arrays.asList("Sehoon", "Songwoo", "Chan", "Youngsuk", "Dajung");
System.out.println("이름이 S로 시작하는 사람은 몇명인가요? " + names.stream().filter(name -> name.startsWith("S")).count()); |
위의 두개의 소스 모두 아래와 같이 동일한 결과가 나옵니다
결과
이름이 S로 시작하는 사람은 몇명인가요? 2 |
명령형, 함수형 스타일을 비교하면 소스가 휄씬 간결하다는것을 볼 수 있다.
따라서 람다 표현식을 사용하면, 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높여줍니다.
람다식의 장점
1. 코드를 간결하게 구성할 수 있다.
함수형 버전는 간결하다. 몇줄의 코드만으로 명령형 버전과 같은결과를 낼 수 있다. 여기서 간결하다는 것은 단순의 코드의 줄 갯수 뿐만 아니라 오류가 없고 개발자의 의도를 효과적으로 잘 전달한다는 것을 의미한다.
2. 오류를 줄일 수 있다.
변수의 명시적인 변경이나 재할당의 문제는 버그의 원천이 되고, 이를 동시성을 갖도록 하기에는 무척 어려운 코드가 된다.
위에서 작성한 명령형 코드에서 반복적으로 foundCnt 를 변경했다. 하지만 함수형 코드에서는 명시적인 변경이 없다.
변수에 대한 변경이 적다는 것은 코드 안에서 발생할 수 있는 오류의 확률을 더 낮게 한다는 의미이다.
3. 원하는 부분을 병렬화 하기 쉽다.
병렬화를 구현하기는 매우 어려운 작업이다. 태스크를 다중 스레드로 나누고, 결과를 모은 뒤 순차적으로 옮겨야한다. 또한 다른 스레드가 데이터를 업데이트 하는 동안에 스레드간의 충돌이 안되게 해야한다.
말로 보는것 조차 어려워보이는데 람다식을 사용하면 간단하게 메소드를 변경하는것만 으로 구현할 수 있다.
[참조] 자바 8 람다의 힘
'Programming > JAVA' 카테고리의 다른 글
[JAVA] 람다식 기본 예제 2 (sorted) (0) | 2018.02.14 |
---|---|
[JAVA] 람다식 기본 예제 1 (map, filter, reduce, collect) (2) | 2018.01.19 |
[JAVA] 문자 관련 stringUtil 모음 (0) | 2017.12.24 |
[JAVA] 날짜 관련 dateutil 모음 (0) | 2017.12.24 |
java.security.KeyException (0) | 2016.05.18 |