Backend/Java

람다식(Lambda Expression)

개발자의 첫 걸음 2025. 7. 28. 10:00

 

안녕하세요.

 

오늘은 람다식 (Lamnda Expression)에 대해 알아볼게요.

 

 

 

람다식

 

람다(표현)식은 자바 8부터 도입이 저작된 함수형 인터페이스예요.

 

함수를 하나의 식으로 간결하게 표현하고,

 

익명 클래스를 대쳐 해 코드의 가독성을 향상하는 특징을 가지고 있어요.

 

 

?!) 함수형 인터페이스란?

 

추상메서드가 단 하나만 존재하는 인터페이스로 

 

인터페이스에 @FunctionalInterface 어노테이션으로 선언이 가능해요.

 

디폴트 메서드, static 메서드는 여러 개 존재가 가능합니다.

 

1. 람다식 기본 형태

cf) 메서드 기본 형태
[접근제어자] 반환타입 메서드명(매개변수...) { 구현부 }

== 람다식 ==
: 추상 메서드를 간결하게 구현하는 것이 목표

+) 인터페이스의 추상 메서드 public abstract 생략

(매개변수) -> { 구현부(실행문) };

        >> 매개변수: 인터페이스의 메서드 매개변수와 동일
        >> -> (연산자): 화살표 매개변수와 실행문을 구분
        >> 실행문: 메서드 몸체, {} 코드 블록

 

 

다음은 람다식의 사용 예제를 볼까요?

 

 

 

람다식의 사용 예제

 

 

1) 기본 표현: 여러 개의 매개변수, 하나의 실행문

@FunctionalInterface
interface Calculator { int add(int a, int b); }


public class D_Lambda {
    public static void main(String[] args) {
    
        System.out.println("=== 익명 플래스를 사용하는 추상 메서드 구현 ===");
        
        Calculator calculator1 = new Calculator() {
            @Override
            public int add(int a, int b) {
                return a + b;
            }
        };

        System.out.println("익명 클래스 결과: " + calculator1.add(3,5)); // 익명 클래스 결과: 8

        System.out.println("=== 람다식을 사용한 추상 메서드 구현 ===");
        Calculator calculator2 = (a,b) -> {
            int result = a + b;
            return result; // 여러 줄 구현은 {} 생략 불가 , (반환값도 반드시 return 사용)
        };
        System.out.println("람다식 결과 1: " + calculator2.add(4,9)); // 람다식 결과 1: 13

        // cf) 람다식의 경우 구현부가 한 줄 일 때 중괄호 생략 가능
        //      >> return 키워드까지 생략! (값은 곧바로 반환)
        Calculator calculator3 = (a, b) -> a + b;
        System.out.println("람다식 결과 2: " + calculator3.add(7,8)); // 람다식 결과 2: 15

 

 

2) 매개변수가 없는 경우

@FunctionalInterface
interface NoParams { void sayHello(); }


public class D_Lambda {
    public static void main(String[] args) {

System.out.println("=== 매개변수가 없는 추상 메서드 표현 (람다식) ===");
        NoParams noParams = () -> {
            String a = "Hi";
            String b = "Hello";
            System.out.println(a + b);
        };
        noParams.sayHello(); // HiHello
            }
}

 

 

3) 매개변수가 한 개인 경우

@FunctionalInterface
interface OneParams { void print(String massage); }


public class D_Lambda {
    public static void main(String[] args) {

System.out.println("=== 매개변수가 하나인 추상 메서드 표현 (람다식) ===");
        OneParams oneParams = massage -> System.out.println("출력: " + massage); // 출력: 안녕
        oneParams.print("안녕");       
           }
}

 

 

4) 실행문이 여러 줄인 경우

@FunctionalInterface
interface Operation { void operate(int a, int b); }


public class D_Lambda {
    public static void main(String[] args) {

System.out.println("=== 실행문이 여러 줄인 추상 메서드 표현 (람다식) ===");
        Operation operation = (a,b) -> {
            System.out.println("합: " + (a + b)); // 8
            System.out.println("차: " + (a - b)); // 4
        };
        operation.operate(6,2);
           }
}

 

 

5) 반환값이 있는 경우

@FunctionalInterface
interface StringLength { int getLength(String str); }


public class D_Lambda {
    public static void main(String[] args) {

System.out.println("=== 반환값이 있는 추상 메서드 표현 (람다식) ===");
        StringLength stringLength = str -> str.length(); // 실행문이 한 줄: return + {} 생략 가능
        // cf) 여러 줄일 경우: return + {} 둘다 생략 불가

        System.out.println("문자열의 길이: " + stringLength.getLength("Lambda"));
        // 문자열의 길이: 6

        // cf) 여러 줄의 코드가 실행문에 작성될 경우
        // : 리스트 순회
        List<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        System.out.println(numbers); // [ 10, 20, 30 ]
            }
}

 

 

여기까지 람다식에 대해 알아봤는데요.

 

람다식은 자바의 함수형 프로그램의 강력한 도구로 사용할 수 있지만

 

너무 남용한다면 복잡해질 수 있으니 

 

간단하고 명확하게 사용해 보는 것이 어떨까요?

 

 

 

 

 

'Backend > Java' 카테고리의 다른 글

Java - JDBC  (3) 2025.08.13
스트림(Stream) API  (5) 2025.07.29
내부 클래스 (Inner Class)  (4) 2025.07.27
프레임워크(Framework)  (6) 2025.07.26
빌더(Builder)  (2) 2025.07.25