Language/JAVA

[이것이 자바다].ch15.람다식

JSJH._. 2026. 1. 1. 15:50

[이것이 자바다] 15. 람다식

안녕하세요. 2026년의 첫 글은 자바의 핵심, 람다식입니다. 또 핵심인가 싶긴한데 이번에는 진짜 핵심입니다. 람다식은 솔직히 없어도 기능을 하는데는 아무런 지장이 없지만, 코드의 길이를 정말 깔끔하고 예쁘게 바꿔주는 핵심적인 기술입니다.


1. 람다식(Lambda Expression)이란?

  • 함수형 프로그래밍: 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법입니다.
  • 자바는 람다식을 통해 이를 지원하며, 코드가 매우 간결해집니다.

비교: 익명 클래스 vs 람다식

Before: 익명 클래스
기능 하나를 전달하기 위해 의미 없는 껍데기(클래스 선언, 메소드 오버라이딩 등) 코드가 너무 길었습니다.

// 버튼 클릭 시 출력하는 기능
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println("Hello World");
    }
});

After: 람다식
불필요한 코드를 걷어내고 핵심 로직만 남깁니다.

// 위와 동일 코드
button.setOnClickListener(v -> System.out.println("Hello World"));

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

  • 람다식은 단 하나의 추상 메소드만 가진 인터페이스에만 사용할 수 있습니다.
  • 이런 인터페이스를 함수형 인터페이스라고 합니다.

@FunctionalInterface

  • 인터페이스가 함수형 인터페이스의 조건을 만족하는지 컴파일러가 검사해주는 어노테이션입니다.
  • 추상 메소드가 두 개 이상이면 컴파일 에러를 발생시켜 실수를 방지합니다.
@FunctionalInterface 
public interface MyFunctionalInterface {
    void method();
    // void otherMethod(); // -> 컴파일 에러 발생!
}

3. 람다식 기본 문법

기본 형태: (매개변수) -> { 실행문 }

  1. 매개변수

    • (int x): 기본형
    • (x): 타입 추론이 가능하면 타입 생략 가능
    • x: 매개변수가 하나라면 괄호 () 생략 가능
    • (): 매개변수가 없다면 () 필수
  2. 실행문

    • { ... }: 기본형
    • x + y: 실행문이 하나라면 중괄호 {} 생략 가능
    • x + y: 리턴문 하나만 있다면 return 키워드와 {} 생략 가능
(x, y) -> x + y  // (x, y) -> { return x + y; } 와 동일

4. 메소드 참조 (Method Reference)

  • 람다식이 단순히 하나의 메소드만 호출하는 경우, 더 간결하게 줄여 쓸 수 있는 문법입니다.
  • :: 기호를 사용합니다.

정적 메소드 참조

  • 클래스::메소드
// (s) -> Integer.parseInt(s) 와 동일
Function<String, Integer> f = Integer::parseInt;

인스턴스 메소드 참조

  • 참조변수::메소드
// () -> obj.myMethod() 와 동일
Runnable r = obj::myMethod;    

생성자 참조

  • 클래스::new
// () -> new Member() 와 동일
Supplier<Member> s = Member::new;

핵심 포인트

  • 람다식
    • 익명 함수를 생성하는 식입니다. 코드가 간결해지고 가독성이 높아집니다.
  • 함수형 인터페이스
    • 추상 메소드가 단 하나인 인터페이스에만 람다식을 쓸 수 있습니다.
  • 메소드 참조(::)
    • 람다식이 메소드 하나만 호출할 때 사용하는 "더 줄여 쓴 람다식"입니다.

감사합니다.