[Java] 자바 함수형 인터페이스와 람다식(Lambda Expression) 쉽게 배우기

2025. 5. 23. 17:59·공부/☕Java

✅ 1. 람다식이란?

// 함수형 인터페이스
@FunctionalInterface
interface Printer {
    void print(String message);
}
// Main
public class Main {
    public static void main(String[] args) {
        Printer printer = (message) -> System.out.println("출력:" + message); // 익명함수정의
        printer.print("print, message") // 정의 된 함수 호출
    }
}
  • 함수형 인터페이스의 추상 메서드를 간결하게 표현하는 문법을 의미한다.
  • 람다식은 오직 추상 메서드가 하나인 인터페이스 에서만 사용이 가능하며, 이를 함수형 인터페이스라고 한다.
  • 익명 구현 클래스의 객체 생성 부분만 람다식으로 표현함.
  • 메서드가 하나만 있기 때문에 메서드 이름을 생략 할 수 있으며, 이때문에 람다식은 익명 함수로도 불린다.

✅ 2. 람다식과 익명클래스

// 람다식
Printer printer = msg -> System.out.println("받은 메시지: " + msg);
// 익명클래스
Printer printer = new Printer() {
    @Override
    public void print(String msg) {
        System.out.println("받은 메시지: " + msg);
    }
};
  • 람다식은 익명 클래스의 단점을 보완하고자 자바 8에서 도입된 기능이다.
  • 즉, 람다식은 익명클래스를 기반으로 만들었기 때문에, 기능적으로는 완전 동일하게 동작을 한다.
  • 인터페이스의 구현체 클래스를 만들지 않고, 익명클래스로 구현을 하기 때문에 익명클래스인것이다.
  • 즉, 람다식은 내부적으로 익명 구현객체가 넘어가지만, 볼 때는 식이 넘어가는 것처럼 보일 수 있다.

✅ 3. 람다식 표현 종류

(1) 매개변수 자료형 생략 가능 - 인터페이스에서 매개변수 타입을 알 수 있으면 자료형 생략이 가능하다.

@FunctionalInterface
interface Calculator {
    int operate(int a, int b);
}
Calculator add = (a, b) -> a + b; // 자료형 생략
System.out.println(add.operate(3, 5)); // 출력: 8

 

(2) 매개변수가 1개면 괄호 생략이 가능하다.

@FunctionalInterface
interface Printer {
    void print(String message);
}
Printer printer = message -> System.out.println("출력: " + message); // 괄호 생략
printer.print("Hello");

 

(3) 매개변수가 0개면 괄호만 남긴다.

@FunctionalInterface
interface Greeter {
    void greet();
}
Greeter greeter = () -> System.out.println("안녕하세요!"); // 괄호만 남음
greeter.greet();

 

(4) 실행문이 1개면 중괄호 생략이 가능하다.

@FunctionalInterface
interface Squarer {
    int square(int x);
}
Squarer s = x -> x * x; // 실행문 1개, 중괄호 생략
System.out.println(s.square(4)); // 출력: 16

 

(5) 실행문이 return 하나면 return + 세미콜론 + 중괄호 생략이 가능하다.

@FunctionalInterface
interface Adder {
    int add(int a, int b);
}
// 이건 생략 전
Adder a1 = (a, b) -> { return a + b; };
// 이건 생략 후
Adder a2 = (a, b) -> a + b; // return, 중괄호, 세미콜론 모두 생략
System.out.println(a2.add(2, 3)); // 출력: 5

✅ 4. 정리

  • 람다식은 인터페이스를 익명클래스로 구현한 클래스이며, 내부적으로 메서드를 구현하는 식을 가지고 있다.
  • 해당 익명클래스의 재정의 된 메서드를 호출함으로써, 구현 된 메서드를 이용하는 방식이 람다식이다.
  • 한마디로, 메서드를 재정의 해서 해당 메서드를 호출해서 이용하는 개념임.

'공부 > ☕Java' 카테고리의 다른 글

[Java] java.io 패키지 입출력 스트림 쉽게 이해하기  (2) 2025.05.28
[Java] java.lang 패키지 정리: Object, String, Math 클래스 총정리  (0) 2025.05.26
[Java] 제네릭(Generic) 문법 정리: 클래스, 메서드, 제한까지  (0) 2025.05.23
[Java] 익명 클래스(Anonymous Class)  (1) 2025.05.22
[Java] 다형성(polymorphism)  (1) 2025.05.22
'공부/☕Java' 카테고리의 다른 글
  • [Java] java.io 패키지 입출력 스트림 쉽게 이해하기
  • [Java] java.lang 패키지 정리: Object, String, Math 클래스 총정리
  • [Java] 제네릭(Generic) 문법 정리: 클래스, 메서드, 제한까지
  • [Java] 익명 클래스(Anonymous Class)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    함수
    Python
    C언어
    방송대
    컴퓨터과학과
    Java
    방통대
    그래프
    컴퓨터의 이해
    자료구조
    배열
    컴퓨터과학 개론
    이산수학
    유비쿼터스
    파이썬
    방송통신대학교
    자바
    운영체제
    spring
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[Java] 자바 함수형 인터페이스와 람다식(Lambda Expression) 쉽게 배우기
상단으로

티스토리툴바