Java 람다 표현식과 함수형 인터페이스
요약
Java 람다 표현식(Lambda Expression)과 함수형 인터페이스(Functional Interface)의 개념을 알아봅니다. 정보처리기사 실기에 출제된 람다 표현식 문제를 풀기 위한 핵심 개념을 정리합니다.
람다 표현식 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 함수형 인터페이스 | 추상 메서드가 딱 하나인 인터페이스 | interface F { int apply(int x); } |
| 람다 표현식 | 함수형 인터페이스를 짧게 구현하는 문법 | (x) -> x * 2 |
| 매개변수 | 화살표(->) 왼쪽에 작성 | (x) 또는 (int x) |
| 본문 | 화살표(->) 오른쪽에 작성 | x * 2 또는 { return x * 2; } |
함수형 인터페이스란?
함수형 인터페이스(Functional Interface) 는 추상 메서드가 딱 하나만 있는 인터페이스입니다.
추상 메서드가 하나뿐이므로, 이 인터페이스를 구현할 때 어떤 메서드를 구현해야 하는지 명확합니다. 이 특성 덕분에 람다 표현식으로 간결하게 구현할 수 있습니다.
함수형 인터페이스 vs 일반 인터페이스
함수형 인터페이스만 람다 표현식으로 구현할 수 있습니다. 추상 메서드가 2개 이상이면 람다 표현식을 사용할 수 없습니다.
람다 표현식이란?
람다 표현식(Lambda Expression) 은 함수형 인터페이스를 짧고 간결하게 구현하는 문법입니다. Java 8부터 도입되었습니다.
기존 방식 vs 람다 표현식
람다 표현식 (x) -> x * 2는 "매개변수 x를 받아서 x * 2를 반환한다"는 뜻입니다. 인터페이스의 유일한 추상 메서드 apply를 자동으로 구현합니다.

람다 표현식 문법
기본 형식
화살표(->)를 기준으로 왼쪽이 매개변수, 오른쪽이 본문입니다.
문법 규칙
단일 표현식이면 중괄호와 return을 생략할 수 있습니다.
여러 문장이면 중괄호와 return이 필요합니다.
매개변수 타입은 생략할 수 있습니다. 컴파일러가 인터페이스의 메서드 선언부를 보고 자동으로 추론합니다.
문법 정리
| 형태 | 예시 | 설명 |
|---|---|---|
| 단일 표현식 | (x) -> x * 2 | 중괄호, return 생략 가능 |
| 여러 문장 | (x) -> { return x * 2; } | 중괄호, return 필요 |
| 타입 명시 | (int n) -> n + 9 | 매개변수 타입을 직접 작성 |
| 타입 생략 | (n) -> n + 9 | 컴파일러가 타입 추론 |
람다 표현식은 어떤 메서드를 구현할까?
람다 표현식은 함수형 인터페이스의 유일한 추상 메서드를 자동으로 구현합니다. 매개변수 개수와 타입, 반환 타입이 인터페이스의 메서드와 일치해야 합니다.
| 인터페이스 메서드 | 람다 표현식 | 연결 |
|---|---|---|
int apply(int x) | (x) -> x * 2 | x는 apply의 매개변수, 반환값은 int |
| 메서드 이름: apply | - | 람다에서 메서드 이름은 쓰지 않음 |
호출: f.apply(3) | 본문 실행 | x에 3이 전달됨 |
실전 예제: 문제 풀이 과정
25년 2회 기출문제와 동일한 구조로 단계별 풀이를 연습합니다.
단계별 분석
1단계: 구조 파악
| 요소 | 역할 |
|---|---|
interface F | 함수형 인터페이스 (apply 메서드 1개) |
run(F f) | F를 받아 f.apply(3)을 실행, 예외 시 7 반환 |
F f = (x) -> { ... } | 첫 번째 람다 표현식 (변수에 저장) |
(int n) -> n + 9 | 두 번째 람다 표현식 (직접 전달) |
2단계: 첫 번째 run(f) 실행
run메서드에서f.apply(3)을 호출합니다- 람다 표현식에서 x = 3이므로
3 > 2가true입니다 throw new Exception()으로 예외가 발생합니다run메서드의 catch 블록에서 예외를 잡아 7을 반환합니다
3단계: 두 번째 run((int n) -> n + 9) 실행
run메서드에서apply(3)을 호출합니다- n = 3이므로
3 + 9 = 12를 반환합니다 - 예외가 발생하지 않으므로 정상적으로 12가 반환됩니다
4단계: 최종 출력
실행 순서 추적
| 순서 | 코드 | 결과 |
|---|---|---|
| 1 | run(f) -> f.apply(3) | x=3, 3>2이므로 예외 발생 |
| 2 | catch (Exception e) | 예외를 잡아 7 반환 |
| 3 | run((int n) -> n + 9) -> apply(3) | n=3, 3+9=12 반환 |
| 4 | 7 + 12 | 19 출력 |