ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 람다식이란?
    프로그래밍 기초 공부 2022. 11. 26. 14:37

    람다식

    • 메서드를 하나의 "식"으로 표현한 것
    • 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, "익명함수" 라고도 함
    • 함수명을 선언하고 사용하는 것이 아닌 식별자 없이 실행가능한 함수

     

    특징

    • 메서드가 1번만 사용되고 메서드 길이가 짧은 경우 매우 유용
    • 절차형 프로그래밍, 객체지향 프로그래밍과는 사뭇 다르게 함수의 구현과 호출만으로 프로그램을 만드는 방식인 함수형 프로그래밍에서 자주 사용됨
    • 자바8부터 도입이 되었으며, 람다식을 익명함수로 만드는 것인데 익명함수는 일급객체 특징
    • 자바에서 메서드는 혼자서 생존할 수 없음
      • 객체가 아니기 때문에 클래스도 만들어야 하고, 객체도 생성해야 쓸 수 있음
      • 하지만 람다식으로 인해 변수처럼 스스로 존재하며 매개변수로 전달하거나 결과로 반환될 수 있음
        • 즉, 람다식으로 메서드는 객체로 취급

     

    람다식 작성

    int select(int a, int b){
    	return a >  b ? a : b;
        }
    //  일반적인 함수
    
    (a,b) -> a > b ? a : b
    //  람다식

     

    람다식 사용 이유

    • 람다식을 쓰지 않을 때보다 코드가 간결해짐
    • 필터링 및 매핑시 집계결과를 쉽게 가져올 수 있음
    • 메서드를 호출하기 위한 불필요한 class, 객체 생성의 과정 불필요
    • 람다식 자체로 메서드의 매개변수로 전달되어지는 것이 가능
      • 결과로 반환 가능
        • 메서드를 변수처럼 다루는 것이 가능해짐

     

    일급객체

    일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체

    함수를 값으로 사용 할 수도 있으며 파라미터로 전달 및 변수에 대입 하기와 같은 연산들이 가능

    함수형 프로그래밍에 1급객체라는 말을 자주 사용

    Kotlin 함수는 1급 객체지만, Java는 1급객체가 아님

    3가지 조건을 만족하면 1급객체

    1. 함수를 변수에 할당할 수 있어야 함
    2. 다른 함수의 파라미터로 함수 객체를 넘길 수 있어야 함
    3. 함수의 리턴값으로 함수 객체를 리턴할 수 있어야 함

     

    함수형 인터페이스

     

    • 추상메서드가 1개만 정의된 인터페이스
    • 람다식을 다루기 위한 인터페이스
    • 오직 하나의 추상 메서드만 정의되어 있어야 한다는 제약
    • static메서드와 default메서드의 개수에는 제약이 없음

     

    • 자바에서 모든 메서드는 클래스 내에 포함되어야 함, 람다식은 익명 클래스의 객체라고 보면 됨

     

     

    익명클래스

    • 클래스 선언과 객체의 생성을 동시에 하여 한번만 사용될 수 있고 오직 하나의 객체만 생성할 수 있는 일회용 클래스

     

    함수형 인터페이스 타입의 매개변수와 반환타입

    • 람다식을 매개변수로 지정 가능하며, 반환타입으로 이용할 수 있음

     

    람다식의 타입과 형변환

    • 람다식은 익명 객체이므로 타입이 없고, 함수형 인터페이스로 람다식을 참조할 수 있는 것일 뿐 람다식의 타입이 함수형 인터페이스의 타입과 일치하는 것은 아님
    • 실제로 타입이 없는것은 아니고, 타입은 있지만 컴파일러가 임의로 이름을 정하기때문에 알 수 없음

     

    람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주
    외부 지역변수와 같은 이름의 람다식 매개변수는 허용되지 않음

     

Designed by Tistory.