[Java] Java에서 람다식으로 코딩을 하면?
Java에서 람다식으로 코딩을 하면?
람다식이란?
- 람다식, 또는 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어
- Java에서는 8버전부터 지원
장점
1. 코드의 간결성 - 효율적인 람다 함수의 사용을 통하여 불필요한 루프문의 삭제가 가능하며, 동일한 함수를 재활용할 수 있는 여지가 커진다.
2. 필요한 정보만을 사용하는 방식을 통한 퍼포먼스 향상 - 지연 연산을 지원하는 방식을 통하여 효율적인 퍼포먼스를 기대할 수 있다. 이 경우 메모리 상의 효율성 및 불필요한 연산의 배제가 가능하다는 장점이 있다.
단점
1. 어떤 방법으로 작성해도 모든 원소를 전부 순회하는 경우는 람다식이 조금 느릴 수 밖에 없다. (어떤 방법으로 만들어도 최종 출력되는 bytecode 나 어셈블리 코드는 단순 while(혹은 for) 문 보다 몇 단계를 더 거치게 된다.)
2. 익명함수의 특성상 함수 외부의 캡처를 위해 캡처를 하는 시간제약 논리제약적인 요소도 고려해야 하며, 디버깅 시 함수 콜스택 추적이 극도로 어렵다.
3. 람다식을 너무 남발하여 사용하게되면 오히려 코드를 이해하기 어려울 수 도 있다.
(출저 : https://namu.wiki/w/%EB%9E%8C%EB%8B%A4%EC%8B%9D)
예제
1.
기존 표현
1 2 3 | for (int i = 0; i < 10; i++) { System.out.println(i); } | cs |
람다식 표현
1 | IntStream.range(0, 10).forEach((int value) -> System.out.println(value)); | cs |
2.
기존표현
1 2 3 4 | int sum; int[] arr = {1,2,3,4,5}; sum = Arrays.stream(arr).sum(); System.out.println("합 : " + sum); | cs |
람다식 표현
1 2 3 4 | static int sum; List<Integer> list = Arrays.asList(1,2,3,4,5); list.stream().forEach((i) -> { sum += i;}); System.out.println("합 : " + sum); | cs |
3. 람다식 예제 소스
깃허브에 포크해둔 소스
https://github.com/devJJo/java-8-lambdas-exercises
생각해 볼 부분
1. 지금 진행중인 프로젝트에서 람다식을 직접 활용할 수 있는 부분 찾아보기
2. 회사에서 진행중인 프로젝트에 기존표현이 아닌 람다식을 적용해서 코딩하면
내가 아닌 다른사람이 내가 짠 코드를 유지보수 할 때 람다식에 익숙치 않다면
불편할 것 같은 느낌...
3. 요즘 드는 생각은 끊임 없이 나오는 신기술들이 많은데 이 많은 신기술들을 언제 다 공부하지..?
라는 생각보단 필요에 의해 찾아 사용하는것이 좋을것 같다 라는 생각이든다.
단, 이런게 있다라는것 정도는 알고 있어야 한다.
생활코딩 강의에서도 느꼈지만, 내가 모르는걸 알고 있는 상태와 모르는걸 모르는 상태는
엄청 큰 차이가 있기 때문이다.