[이것이 자바다] 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. 람다식 기본 문법
기본 형태: (매개변수) -> { 실행문 }
매개변수
(int x): 기본형(x): 타입 추론이 가능하면 타입 생략 가능x: 매개변수가 하나라면 괄호()생략 가능(): 매개변수가 없다면()필수
실행문
{ ... }: 기본형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;
핵심 포인트
- 람다식
- 익명 함수를 생성하는 식입니다. 코드가 간결해지고 가독성이 높아집니다.
- 함수형 인터페이스
- 추상 메소드가 단 하나인 인터페이스에만 람다식을 쓸 수 있습니다.
- 메소드 참조(
::)- 람다식이 메소드 하나만 호출할 때 사용하는 "더 줄여 쓴 람다식"입니다.
감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch17.데이터 입출력 (0) | 2026.01.02 |
|---|---|
| [이것이 자바다].ch16.스트림 요소 처리 (0) | 2026.01.01 |
| [이것이 자바다].ch14.컬렉션 (0) | 2025.12.30 |
| [이것이 자바다].ch13.스레드 (0) | 2025.12.30 |
| [이것이 자바다].ch12.제네릭 (0) | 2025.12.29 |