람다 표현식 (Lambda Expression)

코딩JavaPython
읽는데 14분 소요
처음 쓰여진 날: 2026-04-10
마지막 수정일: 2026-04-10
조회수: 6
선수학습(1개)

요약

람다 표현식(Lambda Expression)의 개념과 문법을 Java와 Python으로 비교합니다. 정보처리기사 실기에 출제되는 람다 표현식 문제를 풀기 위한 핵심 개념을 정리합니다.

람다 표현식 핵심 정리

개념설명예시
함수형 인터페이스추상 메서드가 딱 하나인 인터페이스interface F { int apply(int x); }
익명 내부 클래스클래스 이름 없이 필요한 자리에서 바로 구현하는 일회용 클래스new F() { ... }
람다 표현식익명 내부 클래스를 짧게 줄인 문법(x) -> x * 2

함수형 인터페이스 쌩기초

함수형 인터페이스(Functional Interface) 는 추상 메서드1딱 하나만 있는 인터페이스입니다. 인터페이스란 "이런 메서드가 있어야 한다"는 약속을 정의한 것으로, 구현은 나중에 다른 클래스가 채워 넣습니다.

java
코드 하이라이팅 중...

int apply(int x);처럼 중괄호 없이 세미콜론으로 끝나는 이유는, 인터페이스의 메서드는 실제 동작을 적지 않고 "이름과 매개변수만" 선언하기 때문입니다. 실제 동작은 구현하는 쪽(클래스)에서 채워 넣습니다.

메서드가 하나뿐이므로, 이 인터페이스를 구현할 때 어떤 메서드를 구현해야 하는지 헷갈릴 일이 없습니다. 이 특성 덕분에 뒤에서 배울 람다 표현식으로 간결하게 구현할 수 있습니다.


기존 구현 방식: 익명 내부 클래스 쌩기초

람다 표현식을 이해하려면, 먼저 기존에 인터페이스를 구현하던 방식을 알아야 합니다.

인터페이스를 구현하는 가장 기본적인 방법은 클래스를 만들어서 구현하는 것입니다.

java
코드 하이라이팅 중...

class MyF implements F에서 class2는 새 클래스를 만드는 키워드이고, implements는 "이 인터페이스의 약속을 지키겠다"는 선언입니다. public int apply(int x)public3은 이 메서드를 어디서든 호출할 수 있다는 의미입니다.

인터페이스 F(설계도) → 클래스 MyF(구현) → 변수 f(사용)의 관계를 보여주는 다이어그램
인터페이스(약속)를 클래스가 구현하고, 변수에 담아 사용한다

하지만 한 번만 쓸 구현체를 위해 별도의 클래스를 만드는 것은 번거롭습니다. 그래서 Java는 익명 내부 클래스라는 문법을 제공합니다. 클래스 이름 없이 즉석에서 인터페이스를 구현합니다.

java
코드 하이라이팅 중...

new F() { ... } 안에서 apply 메서드의 실제 동작을 작성합니다. 클래스 이름을 따로 정하지 않아도 되므로 익명(anonymous)이라고 부릅니다.


람다 표현식이란? 기초

람다 표현식(Lambda Expression) 은 익명 내부 클래스를 더 짧게 줄인 문법입니다. Java 8(2014년)부터 사용할 수 있는 문법입니다. 시험에서는 버전을 신경 쓸 필요 없이 문법 자체만 알면 됩니다.

함수형 인터페이스는 메서드가 하나뿐이므로, new F(), 메서드 이름 apply, 매개변수 타입 int 등 이미 정해져 있는 부분을 전부 생략하고 핵심 로직만 남길 수 있습니다.

java
코드 하이라이팅 중...

(x) -> x * 2는 "매개변수 x를 받아서 x * 2를 반환한다"는 뜻입니다.

변환 과정

text
코드 하이라이팅 중...
생략 대상이유
new F()인터페이스 타입은 변수 선언부(F f =)에서 이미 알 수 있음
메서드 이름 (apply)추상 메서드가 하나뿐이면 어떤 메서드를 구현하는지 컴파일러가 알 수 있으므로 이름을 안 적어도 됨
매개변수 타입 (int)인터페이스의 메서드 선언부에서 추론 가능
return, { }본문이 한 줄이면 생략 가능

람다 표현식 문법 기초

기본 형식

java
코드 하이라이팅 중...

화살표(->)를 기준으로 왼쪽이 매개변수, 오른쪽이 본문입니다. 예를 들어 (x) -> { return x * 2; }는 "매개변수 x를 받아서 x * 2를 반환한다"는 뜻입니다.

단일 표현식 vs 여러 문장

java
코드 하이라이팅 중...

매개변수 타입 생략

매개변수 타입은 생략할 수 있습니다. 컴파일러4가 인터페이스의 메서드 선언부(int apply(int x))를 보고, xint 타입이라는 것을 자동으로 알아냅니다. 이를 "타입 추론"이라고 합니다.

java
코드 하이라이팅 중...

문법 정리

형태예시설명
단일 표현식(x) -> x * 2중괄호, return 생략 가능
여러 문장(x) -> { return x * 2; }중괄호, return 필요
타입 명시(int n) -> n + 9매개변수 타입을 직접 작성
타입 생략(n) -> n + 9컴파일러가 타입 추론

람다 표현식 활용 심화

변수에 저장해서 사용

java
코드 하이라이팅 중...

f.apply(5)를 호출하면 람다 표현식의 본문이 실행됩니다. x에 5가 전달되어 5 * 2 = 10을 반환합니다.

메서드 인자로 직접 전달

변수에 저장하지 않고, 메서드 호출 시 바로 람다 표현식을 전달할 수도 있습니다. run(F f)처럼 함수형 인터페이스를 매개변수로 받으면, 람다 표현식을 직접 인자로 넘길 수 있습니다.

java
코드 하이라이팅 중...

static5이 붙은 메서드는 객체를 만들지 않아도 바로 호출할 수 있습니다. 두 방식 모두 동일하게 동작합니다. run 메서드 입장에서는 F 타입의 값을 받는 것이므로, 변수에 담든 직접 전달하든 차이가 없습니다.

Java의 "람다 표현식"과 같은 개념입니다. Python에서는 lambda라는 키워드를 사용하므로 영문 그대로 씁니다. 개념은 동일하지만 문법이 다르므로, 언어별 형태를 구분해서 기억하세요.

lambda 표현식 핵심 정리

개념설명예시
def 함수이름이 있는 일반 함수 정의def add(x): return x + 100
lambda이름 없는 익명 함수를 한 줄로 표현lambda x: x + 100
map()함수를 리스트 각 요소에 적용map(lambda x: x + 1, lst)

일반 함수 정의 복습 쌩기초

lambda를 이해하려면, 먼저 def함수를 정의하는 기본 방식을 알아야 합니다.

python
코드 하이라이팅 중...

def 키워드로 함수 이름을 정하고, return으로 결과를 돌려줍니다. 이 함수는 매개변수6 num을 받아서 num + 100을 반환합니다.


lambda 표현식이란? 기초

lambda는 이름 없는 익명 함수를 한 줄로 정의하는 문법입니다. def로 만든 함수와 동일하게 동작하지만, 함수 이름과 return 키워드를 생략합니다.

python
코드 하이라이팅 중...

add_100 = lambda num: num + 100에서 lambda 자체는 이름 없는 함수입니다. add_100은 함수의 이름이 아니라 그 함수를 담은 변수의 이름입니다. 마치 x = 5에서 5라는 값을 x라는 변수에 담는 것처럼, 이름 없는 함수를 add_100이라는 변수에 담은 것입니다.

변환 과정

text
코드 하이라이팅 중...
일반 함수 (def)lambda
def add_100(num):lambda num:
return num + 100num + 100
함수 이름 있음이름 없음 (변수에 저장 가능)7
여러 줄 가능한 줄만 가능

lambda 문법 기초

기본 형식

python
코드 하이라이팅 중...

콜론(:)을 기준으로 왼쪽이 매개변수, 오른쪽이 반환식입니다. return을 적지 않아도 콜론 뒤의 식 결과를 자동으로 돌려줍니다. 매개변수 이름은 x, num, n 등 자유롭게 정할 수 있습니다. 예시마다 이름이 달라도 동작은 같습니다.

매개변수가 여러 개인 경우

python
코드 하이라이팅 중...

매개변수를 쉼표로 구분합니다.

문법 정리

형태예시설명
매개변수 1개lambda x: x + 100가장 기본적인 형태
매개변수 여러 개lambda x, y: x * y쉼표로 구분
조건 표현식lambda x: x if x > 0 else 0삼항 연산자8 사용 가능

조건 표현식 예시:

python
코드 하이라이팅 중...

map 함수와 lambda 기초

lambda는 map() 함수와 함께 자주 사용됩니다. map()은 함수와 iterable9을 받아 각 요소에 함수를 적용한 결과를 반환합니다.

map 기본 형식

python
코드 하이라이팅 중...

map()은 map 객체를 반환하므로, 리스트로 변환하려면 list()를 사용합니다. 지금은 "map()의 결과는 바로 쓸 수 없고 list()로 감싸야 한다"만 기억하면 됩니다.

사용 예제

python
코드 하이라이팅 중...

각 요소에 lambda num: num + 100 함수를 적용하여 새로운 리스트를 만듭니다.

원본 요소lambda num: num + 100결과
11 + 100101
22 + 100102
33 + 100103
44 + 100104
55 + 100105
리스트 [1, 2, 3, 4, 5]의 각 요소가 lambda num: num + 100을 통과하여 [101, 102, 103, 104, 105]가 되는 흐름 다이어그램
map()은 각 요소에 함수를 적용한 결과를 반환한다

Java와 Python 비교 심화

Java와 Python 모두 람다 표현식을 지원하지만, 문법과 사용 방식에 차이가 있습니다.

구분JavaPython
문법(x) -> x * 2lambda x: x * 2
구분자화살표 ->콜론 :
여러 문장중괄호 { } 안에 작성 가능단일 표현식만 가능
전제 조건함수형 인터페이스 필요별도의 인터페이스 없이 바로 사용 가능
도입 시기Java 8 (2014)Python 초기부터

"여러 문장" 행 비교 예시: Java는 중괄호 안에 여러 줄을 쓸 수 있지만, Python lambda는 한 줄만 가능합니다.

java
코드 하이라이팅 중...
python
코드 하이라이팅 중...

정보처리기사 실기 기출 문제


Footnotes

  1. 추상 메서드란 몸체(중괄호 안의 코드)가 없는 메서드입니다. 이름과 매개변수만 정의되어 있고, 실제 동작은 구현하는 쪽에서 채워 넣습니다.

  2. class 클래스명은 새 클래스를 만드는 선언입니다. implements 인터페이스명을 붙이면 "이 인터페이스의 약속을 지키겠다"는 선언이 되며, 해당 인터페이스의 모든 추상 메서드를 반드시 구현해야 합니다.

  3. 접근 제어자는 메서드나 변수를 누가 사용할 수 있는지를 제한합니다. public은 제한이 없어 어디서든 호출 가능합니다. 인터페이스의 메서드를 구현할 때는 반드시 public을 붙여야 합니다.

  4. 컴파일러란 Java 코드를 컴퓨터가 실행할 수 있는 형태로 번역해주는 프로그램입니다.

  5. static은 클래스의 인스턴스(객체)를 만들지 않아도 바로 사용할 수 있게 해주는 키워드입니다. static 메서드는 객체.메서드() 대신 클래스명.메서드() 형태로 호출합니다.

  6. 매개변수란 함수가 호출될 때 전달받는 값을 담는 변수입니다. def add_100(num)에서 num이 매개변수입니다.

  7. lambda는 이름 없는 함수이지만, 변수에 담으면 변수 이름으로 호출할 수 있습니다. 변수 이름이 함수 이름처럼 보이지만, 엄밀히는 함수를 담은 변수입니다.

  8. 삼항 연산자는 조건에 따라 두 값 중 하나를 선택하는 표현식입니다. Python에서는 값1 if 조건 else 값2 형태로 씁니다. 예: x if x > 0 else 0은 x가 양수면 x, 아니면 0을 반환합니다.

  9. iterable이란 값이 여러 개 들어있어서 하나씩 꺼낼 수 있는 것을 뜻합니다. [1, 2, 3] 같은 리스트가 대표적인 예이며, for문으로 순회할 수 있는 것은 모두 iterable입니다.