[Java] Chapter 16. 람다식

SeungWoo Cha·2025년 9월 15일

[Java] 이것이 자바다

목록 보기
15/17

Chapter 16. 람다식

16.1. 람다식이란?

1. 함수형 프로그래밍

  • 정의: 함수를 정의하고 이 함수를 데이터 처리부에 전달하여 데이터를 처리하는 기법
  • 데이터 처리부는 데이터만 보유하고 있으며, 처리 방법은 외부에서 제공된 함수에 의존
  • 데이터 처리의 다형성: 제공되는 함수에 따라 처리 결과가 달라지는 것이 특징

2. 람다식

  • 자바는 람다식을 **익명 구현 객체(인터페이스 구현 객체)**로 변환
  • 따라서 람다식은 인터페이스 타입의 매개변수로 대입될 수 있음

3. 함수형 인터페이스

  • 인터페이스에 추상 메소드가 단 하나만 존재할 경우, 이를 함수형 인터페이스라고 함
  • 함수형 인터페이스는 람다식으로 표현 가능

4. @FunctionalInterface

  • 인터페이스가 함수형 인터페이스임을 보장하기 위해 @FunctionalInterface 어노테이션을 사용
  • 선택 사항이지만, 컴파일 시 추상 메소드가 하나인지 검사하여 정확한 함수형 인터페이스 작성 가능
// 예시
(x, y) -> { 처리 내용 }

참고: 객체를 하나 더 만드는 이유는 main에서 직접 구현 객체를 생성하지 않고,
별도의 객체에서 구현 객체를 받아 람다식을 구현하기 위함이다.


16.2. 매개변수가 없는 람다식

작성 방식

  1. 여러 실행문

    () -> { 실행문1; 실행문2; }
  2. 실행문이 하나일 경우

    () -> 실행문

예시

() -> System.out.println("Hello Lambda");

16.3. 매개변수가 있는 람다식

  • 매개변수 선언 시 타입은 생략 가능
  • var 사용도 가능하지만 일반적으로는 타입 생략 방식을 사용

작성 방식

  1. 타입 명시

    (타입 매개변수, ...) -> 실행문
    (타입 매개변수, ...) -> { 실행문; 실행문; }
  2. var 사용

    (var 매개변수, ...) -> 실행문
    (var 매개변수, ...) -> { 실행문; 실행문; }
  3. 타입 생략

    (매개변수, ...) -> 실행문
    (매개변수, ...) -> { 실행문; 실행문; }
  4. 매개변수가 하나일 경우 괄호 생략 가능

    매개변수 -> 실행문

예시

word -> System.out.println(word);

16.4. 리턴값이 있는 람다식

  • 함수형 인터페이스의 추상 메소드에 리턴값이 있을 경우 사용

작성 방식

  1. 여러 실행문

    (매개변수, ...) -> { 실행문; return; }
  2. return 문 하나만 있을 경우

    (매개변수, ...) ->
  • return 문 하나만 있으면 중괄호와 return 키워드 생략 가능

예시

(x, y) -> sum(x, y)

16.5. 메소드 참조

  • 정의: 메소드를 직접 참조하여 불필요한 매개변수를 제거하는 기법

예시

(left, right) -> Math.max(left, right)
Math::max

1. 정적 메소드와 인스턴스 메소드 참조

  • 정적 메소드 참조

    클래스 :: 메소드
    Computer :: staticMethod
  • 인스턴스 메소드 참조

    참조변수 :: 메소드
    com :: instanceMethod

2. 매개변수의 메소드 참조

(a, b) -> a.instanceMethod(b)
클래스 :: instanceMethod

16.6. 생성자 참조

  • 생성자를 참조한다는 것은 객체를 생성하는 것을 의미
  • 람다식이 단순히 객체 생성만 한다면, 생성자 참조로 대체 가능

예시

(a, b) -> { return new 클래스(a, b); }
클래스 :: new
  • 생성자가 오버로딩된 경우, 함수형 인터페이스의 추상 메소드 매개변수 개수와 타입에 맞는 생성자가 실행됨
profile
한 발자국씩

0개의 댓글