Java & Spring/컬렉션 프레임워크

람다 표현식

승주우에요 2026. 1. 19. 08:33

1. 람다 표현식 등장 배경

자바는 전통적으로 객체지향 언어이다. 

클래스 -> 객체 -> 메서드 호출 

즉, 동작 하나를 전달하려면 객체가 반드시 필요했었음. 하지만 현대 프로그래밍에서는 다음과 같은 요구가 커졌음

  • 이 동작만 넘기고 싶다
  • 굳이 클래스가 필요할까?
  • 함수를 값처럼 넘길 수는 없나? 

2. 람다 표현식이란?

람다는 익명 함수라고 설명하지만 이는 정확하지 않음. 람다는 메서드를 구현한 객체를 간결하게 표현하는 문법이다. 

자바에는 여전히 함수 타입이 없고, 람다는 객체로 동작한다 !!

 

3. 람다 표현식 기본 문법

(매개변수) -> {실행문}

// 예시 
(a,b) -> {a + b}

// 이 코드와 완전 동일 
new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        return a + b;
    }
};

람다는 코드를 줄인 것이 아니라, 불필요한 구조를 제거한 것에 가깝다.

 

4. 람다는 어디에 저장될까? 

람다는 단독으로 존재할 수 없다. 반드시 어떤 타입에 대입되어야 함.

(a, b) -> a + b; // 컴파일 불가

Comparator<Integer> comp = (a, b) -> a - b;

 

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

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

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
}

왜 하나만 가능하지? -> 메서드가 여러개라면 람다는 어느 메서드를 의미하는지 알 수 없다. 따라서 추상 메서드 1개만 허용

 

6. Function Descriptor

람다와 메서드는 매개변수 타입, 변환 타입으로 연결된다. 

(int, int) -> int

 

7. 정리

  • 람다는 객체지향 언어의 한계를 보완함
  • 동작을 값처럼 다룰 수 있게 함
  • Stream API의 기반이 되는 핵심 개념

'Java & Spring > 컬렉션 프레임워크' 카테고리의 다른 글

제네릭 (Generic)  (0) 2026.01.20
List, Set, Map  (0) 2026.01.08
JCF가 왜 필요할까?  (0) 2026.01.08