티스토리 뷰

반응형

🚀 Lambda 의 등장

기술이 발전되어 가면서 커져만 가는 데이터를 처리한 방법을 필요로했고 이를 필요로 하는 CPU 의 성능 향상이 필요하게 되었다.

이후 CPU에 멀티 코어가 등장하게 되면서 모든 데이터를 빠르게 처리하기 위해 모든 코어를 동원할 수 있는 기술을 개발하게된다.

그렇게 JAVA 8에서 새롭게 등장한 병렬화 개념이 등장했고 동시에 Collection (Map / Set / List)가 더욱 강화 되었다.
이러한 컬렉션 기능을 더욱 효울적으로 사용하기 위해 등장한 함수형 프로그래밍이 오늘의 주제인 Lambda인 것이다.

그래서 람다식이란?

스프링을 위한 자바 객체 지향의 원리와 이해 에서 정의한 람다식 이란?

코드 블록을 위해 메서드를, 메서드를 사용하기 위해 익명 객체를 만드는 복잡함을 줄이고
코드 블록 자체를 메서드의 인자나 반환값으로 사용하기 위한 수학적으로 단순화 시킨 표현방법으로 정의한다.

🌠 함수형 프로그래밍 (functional programming)

자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.

즉, 문제를 해결하기 위한 함수를 작성하여 가독성과 유지보수의 장점을 취하는 프로그래밍 방법이다.

익명함수(Anonymous Function)

함수의 이름이 없는 함수로, 익명함수들은 모두 1급 객체이다.

  • 변수나 데이터 구조 안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값으로 사용할 수 있다.
  • 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.

☄ 장점

  • 높은 수준의 추상화를 제공한다
  • 함수 단위의 코드 재사용이 수월하다
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다

☄ 단점

  • 순수함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다
  • 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있다
  • 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다

🌠 Lambda 개념

  • Java 8에서 등장
  • 메소드를 하나의 식으로 표현
  • 매개변수, ->(화살표), {몸통} 구조
  • 메소드의 매개변수로 전달할 수 있고, 메소드 결과로 반환 가능
  • 람다는 함수형 인터페이스를 통해서만 사용 가능
    • 함수형 인터페이스
    • 인터페이스 내에 한 개의 추상 메소드만 정의
    • 외부에서 메소드 호출 시 람다식이나 메소드 참조 가능
    • 자바에서 함수를 일급 객체로 사용할 수 없는 단점 보완
    • 함수형 인터페이스임을 명확히 하기 위해 @FunctionalInterface 사용
    • ex. Comparator, Runnuble
  • Lambda 의 등장 계기
    • 함수형 프로그래밍, 함수형 패러다임의 등장에 따라 등장
@FunctionalInterface 
interface MyLambdaFunction { 
    int max(int a, int b);  // 출력 -> 5 
} 
public class Lambda { 
    public static void main(String[] args) {

        // 람다식을 이용한 익명함수
      MyLambdaFunction lambda = (int a, int b) -> a > b ? a : b;
      System.out.println(lambda.max(3, 5)); 
    } 
}

🌠 Lambda 장점

  • 기존에 익명함수로 작성하던 코드를 줄여 간단하게 작성 가능
  • 가독성 증가
  • 병렬 프로그래밍에 용이

🌠 Lambda 단점

  • 남용하면 코드를 이해하는데 어려움
  • 까다로운 재귀 활용 및 디버깅

🌠 컴파일러가 Lambda 표현식을 처리하는 방법

  • 익명 함수와는 다르게 컴파일
  • 익명 함수는 별도 클래스의 인스턴스를 생성
  • Lambda는 invokedynamic을 사용하여 Lambda 표현식 구현을 위한 코드 생성을 런타임 시 까지 연기
  • 런타임 시에 어떤 방법으로 객체를 생성할지 결정하는데, 성능 향상을 위한 최적화된 방법 사용

🚀 정리

이번 포스팅에서 람다함수형 프로그래밍에 대해 포스팅했다.

이 두가지를 이해하는 것으로 많은 곳에 적용할 수 있지만
최종적으로 자바의 Stream을 사용하기 위해 이 두가지 기능을 이해해야한다.

🧾 Reference

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함