ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 람다와 스트림 - 람다식의 활용
    백엔드/자바 2021. 8. 24. 15:21

     

     

    람다와 스트림 - 함수형 인터페이스

    람다와 익명 객체() 람다와 스트림 - 람다식의 정의 람다식(Lambda Expression)이란? 자바 관련 예제를 보다보면 위와 같은 식을 코드를 볼 수 있다. 메서드들을 체이닝으로 이어준 것인데, 그 중에서

    sgcomputer.tistory.com

     

    이전 파트에서 익명 객체를 어떤식으로 만드는지, 그리고 그렇게 만들어진 익명 객체를

     

    어떻게 람다식으로 간략히 표현하는지 알아봤다.

     

    이번 파트에는 람다식을 활용한 다양한 예시를 알아보도록 하자.

     

    sort()에서의 람다 사용

     

    위와 같이 String을 요소로 가지는 리스트를 정렬한다고 가정해보자.

     

    이 리스트를 정렬할 때 Collections.sort()를 사용하는데 매개변수로 Comparator를 전달해야 한다.

     

    하지만 위에서 보시다시피 Comparator 객체를 전달하고 그 안에 compare()까지 구현해야 한다.

     

    그래서 필연적으로 코드가 길어질 수 밖에 없는데 이를 람다로 간단하게 표현할 수 있다.

     

     

     

    위와 같이 Comprator의 익명 객체 전체를 람다식으로 대체했다.

     

    아주 간단하게 표현했는데 대략 어떻게 변했는지는 아래 그림을 보면 알 수 있다.

     

     

     

    아주 간단하게 표현이 됐는데 왜 이렇게 됐는지 이해가 안되면 아래 내용을 더 보도록 하자.

     

     

     

    우선 sort()는 List, Compartor만 매개변수로 받는 것이 가능하다.

     

    즉 람다식을 써주면 그 람다식이 알아서 Comparator에 매칭된다는 것이다.

     

     

     

    그 다음은 람다식이 매칭되는 Comparator가 바로 함수형 인터페이스라는 점이다.

     

    이전 파트에서 말했다시피 익명 객체 사용을 위해선 함수형 인터페이스가 필요하다.

     

    그런데 Comparator는 함수형 인터페이스이므로 람다식을 적용할 수 있는 것이다.

     

    그리고 마지막으로 우리는 여기서 중요한 사실을 알 수 있다.

     

    람다식이 단순히 함수형 인터페이스를 타입으로 하는 참조변수에 저장되는 것 뿐 만 아니라,

     

    메서드의 매개변수로도 전달될 수 있다는 것이다.

    람다식과 매개변수와 반환

    이전 단락에서 sort() 메서드를 통해 람다식이 매개변수로 전달되는 것을 보았다.

     

    이처럼 람다식은 단순히 참조변수에 저장되어 사용하는 것보다 다양한 용도로 사용이 가능하다.

     

    이번 단락에선 해당 내용에 대해 알아보도록 하자.

     

     

     

    위와 같이 run()이라는 메서드가 선언된 함수형 인터페이스가 있다고 가정해보자.

     

     

     

    우리가 처음에 배운 람다와 함수형 인터페이스 사용법은 위와 같다.

     

    간단하게 함수형 인터페이스 타입의 참조 변수에 익명 객체를 저장하여 사용하는 간단한 방식이었다.

     

     

     

    그 다음 배운 사용법은 위 코드처럼 함수형 인터페이스를 람다로 줄여서 매개변수로 전달한 것이다.

     

    Collectiosn.sort()를 쓸 때 Comparator 인터페이스를 람다식으로 줄여 매개변수로 사용한 것과 같다.

     

    이처럼 람다식을 메서드의 매개변수로 전달하더라도 람다식은 정상적으로 작동한다.

     

     

     

    그리고 마지막으로 배울 것은 바로 람다식을 반환값으로 전달하는 것이다.

     

    람다식은 이전에 이야기했듯 익명 객체를 요약한 식이다.

     

    그러므로 람다식도 객체처럼 다룰 수 있다.

     

    그래서 이전에 참조변수에 저장하거나 매개변수에 쓴 것처럼 반환값으로도 사용이 가능하다.

Designed by Tistory.