ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Java에서 람다식으로 코딩을 하면?
    IT/개발 기록 2018. 11. 25. 18:07

    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(010).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. 요즘 드는 생각은 끊임 없이 나오는 신기술들이 많은데 이 많은 신기술들을 언제 다 공부하지..?

    라는 생각보단 필요에 의해 찾아 사용하는것이 좋을것 같다 라는 생각이든다.

    단, 이런게 있다라는것 정도는 알고 있어야 한다. 

    생활코딩 강의에서도 느꼈지만, 내가 모르는걸 알고 있는 상태와 모르는걸 모르는 상태는 

    엄청 큰 차이가 있기 때문이다.





    댓글