Lambda Expression(=람다식)

2025. 11. 28. 15:05·java

# 람다식이란?

Java에서 람다식은 익명 함수를 간단하고 직관적으로 표현하기 위한 문법이다.
특히 추상 메서드가 하나만 존재하는 인터페이스(함수형 인터페이스)를 구현할 때 자주 사용되며 불필요한 클래스 선언 없이 간편하게 동작을 전달할 수 있다.


# 람다식 기본 문법

(parameter) -> expression

() : 매개변수 선언
-> : 함수의 동작을 표현
expression 또는 {... } : 실행할 코드

(parameter) -> { expression }
여러 줄의 코드가 필요한 경우 중괄호 { }를 사용한다.

 


# 람다식 문법 예시

1) 매개변수가 없는 경우

() -> System.out.println("A");

2) 매개변수가 하나인 경우

x -> x * x;

3) 매개변수가 여러 개인 경우

(a, b) -> a + b;

4) 여러 줄의 코드가 있을 경우

(a, b) -> { int sum = a + b; return sum; }

# 람다식 활용 예시(사용자 정의 함수형 인터페이스)

아래 코드는 IAdd라는 함수형 인터페이스를 람다식으로 구현하여 사용한 예시다.

@FunctionalInterface
public interface IAdd {
    int add(int x, int y);
}

class UI {
    public static void main(String[] args) {
        IAdd iAddFunc = (x, y) -> {
            int j = 10;
            return (x + y + j);
        };
        new UiUse().AddSomething(iAddFunc, 3, 4);
    }
}

class UiUse {
    public void AddSomething(IAdd iAdd, int x, int y) {
        System.out.println(iAdd.add(x, y));
    }
}
람다식을 사용하면 인터페이스를 구현하기 위한 별도의 클래스를 만들 필요가 없다.
필요한 동작만 람다로 전달해 간결하게 흐름을 구성할 수 있다.

# Java에서 제공하는 대표적인 함수형 인터페이스

Java는 자주 사용되는 함수 형태를 위해 미리 만들어둔 함수형 인터페이스를 제공한다.

Predicate <T>

조건을 검사하여 boolean 값을 반환한다.

Predicate<String> isEmpty = (str) -> str.isEmpty();
System.out.println(isEmpty.test(""));

Consumer <T>

값을 받아서 사용하지만 반환값은 없다.

Consumer<String> printMsg = msg -> System.out.println(msg);
printMsg.accept("Hello");

Supplier <T>

입력값 없이 값을 제공(return) 한다.

Supplier<Double> randomVal = () -> Math.random();
System.out.println(randomVal.get());

Function <T, R>

값을 받아서 다른 타입으로 변환하는 데 사용된다.

Function<Integer, String> convertFn = (num) -> "Number " + num;
System.out.println(convertFn.apply(10));

# 실무 예시: DB 문자열 데이터를 객체로 매핑하기

데이터베이스에서 cha, 25 같은 문자열을 가져온 뒤
이를 Person 객체로 변환하고 싶을 때 Function을 활용할 수 있다.


Person 객체

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Function을 이용한 변환 로직

class FunctionEx {
    public static void main(String[] args) {
        String dbResult = "cha, 25";

        Function<String, Person> mapToUser = str -> {
            var parts = str.split(",");
            var name = parts[0];
            var age = Integer.parseInt(parts[1]);
            return new Person(name, age);
        };

        System.out.println(new UseFunc().convertFunc(mapToUser, dbResult));
    }
}

 


Generic 메서드로 재사용성 강화

class UseFunc {
    public <T, R> R convertFunc(Function<T, R> func, T param) {
        return func.apply(param);
    }
}

항목 내용
목적 익명 함수 표현 단축, 함수형 프로그래밍 지원
특징 함수형 인터페이스와 함께 사용
문법 (parameter) -> { body }
장점 코드 간결성, 가독성 향상, 불필요한 클래스 제거
대표 인터페이스 Predicate, Consumer, Supplier, Function
실무 활용 데이터 처리, 스트림(Stream) API, 콜백 함수, 이벤트 처리

'java' 카테고리의 다른 글

Thread  (0) 2025.11.28
Stream  (0) 2025.11.28
Generic Type(=제네릭 타입)  (0) 2025.11.28
Abstract class(=추상화)  (0) 2025.11.28
Encapsulation(=캡슐화)  (0) 2025.11.28
'java' 카테고리의 다른 글
  • Thread
  • Stream
  • Generic Type(=제네릭 타입)
  • Abstract class(=추상화)
차하비
차하비
chadev 님의 블로그 입니다.
  • 차하비
    chadev
    차하비
  • 전체
    오늘
    어제
    • 분류 전체보기 (47)
      • kubernetes, k8s (3)
      • docker (3)
      • cloud (6)
      • linux (12)
      • spring (7)
      • java (11)
      • error (4)
      • 자격증 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    HTTP
    monolithic
    Java
    URI
    모놀리식
    docker
    thread
    객체지향
    Join
    클래스
    restAPI
    진법
    Kubernetes
    OOP
    KUBECTL
    k8s
    비트 연산
    Spring
    url
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
차하비
Lambda Expression(=람다식)
상단으로

티스토리툴바