본문 바로가기

Java/문법 및 이해

[JAVA] 람다와 함수형 인터페이스

1. 람다식 (Lambda Expression)

함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면
메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류
라고 볼 수 있다.
// 기존의 방식
반환티입 메소드명 (매개변수, ...) {
	실행문
}

// 예시
public String hello() {
    return "Hello World!";
}

 

하지만 람다 방식으로는 위와 같이 메서드 명이 불필요하며, 다음과 같이 괄호()화살표 → 를 이용해 함수를 선언하게 된다.
// 람다 방식
(매개변수, ... ) -> { 실행문 ... }

// 예시
() -> "Hello World!";

 

이렇게다식은 불필요한 코드를 줄이고, 가독성을 높이기 위해 등장하였다.

함수형 인터페이스의 인스턴스를 생성하여 함수를 변수처럼 선언하는 람다식에서는 메서드의 이름이 불필요하다고 여겨져서 이를 사용하지 않는다. 대신 컴파일러가 문맥을 살펴 타입을 추론한다.

 

 

(1) 람다식의 특징

  • 람다식 내에서 사용되는 변수는 final이 붙지 않아도 상수로 간주된다.
  • 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다.

(2) 람다식의 장점

  • 코드를 간결하게 만들 수 있다.
  • 가독성을 높여준다.
  • 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.
  • 병렬 프로그래밍이 용이하다.

(3) 람다식의 단점

  • 람다를 사용하면 만든 익명 객체, 익명 함수는 재사용이 불가능하다.
  • 디버깅이 어렵다.
  • 람다를 난발하면 함수가 중복 생성되어 오히려 코드가 지저분해진다.
  • 재귀에 매우 부적합하다.

 

2. 함수형 인터페이스 (Functional Interface)

함수를 1급 객체처럼 다룰 수 있게 해주는 어노테이션으로,
인터페이스에 선언하여 단 하나의 추상 메서드만을 갖도록 제한하는 역할
을 한다. 이러한 함수형 인터페이스를 사용하는 이유는 람다식이 함수형 인터페이스를 반환하기 때문이다.

 

예를 들어 두 값 중 큰 값을 구하는 익명 함수를 개발을 할 때, 함수형 인터페이스를 활용하지 않은 상태라면, 아래와 같이 코드를 작성할 것이다.
public class Lambda {

    public static void main(String[] args) {
    
        // 기존의 익명함수
        System.out.println(new MyLambdaFunction() {
            public int max(int a, int b) {
                return a > b ? a : b;
            }
        }.max(3, 5));

    }

}

 

하지만 함수형 인터페이스로 함수를 변수처럼 선언할 수 있고, 코드 역시 간결하게 작성할 수 있다.
// Lambda.java
package lambda.lsm;

@FunctionalInterface
public interface Lambda {
    int max(int a, int b);
}

// Lsm.java
package lambda.lsm;

public class Lsm {
    public static void main(String[] args) {
        Lambda lambda = (a, b) -> a > b ? a : b;
        System.out.println(lambda.max(3, 5));
    }
}

'Java > 문법 및 이해' 카테고리의 다른 글

[JAVA] JDBC 란?  (0) 2023.02.11
[Java] SAX Parser  (0) 2023.01.31
[JAVA] Singleton 싱글톤 디자인 패턴  (0) 2023.01.22
[JAVA] 다형성 Polymorphism  (0) 2023.01.15
[JAVA] String 객체 생성과 Constant Pool  (0) 2023.01.14