정처기 감자정처기 감자
공통 기초함수

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

람다 표현식 (Lambda Expression)

코딩JavaPython
읽는데 14분 소요
처음 쓰인 날: 2026-04-10
마지막 수정일: 2026-04-10
조회수: —
선수학습(1개)
  • 함수의 기초

요약

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

람다 표현식 핵심 정리

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

함수형 인터페이스

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

java
코드 하이라이팅 중…

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

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

메서드 이름은 자유롭게 정할 수 있습니다
함수형 인터페이스의 메서드 이름은 apply, calculate, process 등 어떤 이름이든 상관없습니다. 중요한 것은 추상 메서드가 '딱 하나'라는 점입니다.

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

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

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

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))를 보고, x가 int 타입이라는 것을 자동으로 알아냅니다. 이를 "타입 추론"이라고 합니다.

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이라는 변수에 담은 것입니다. 참고로 위의 def add_100(num):도 함수를 만들어 add_100이라는 이름에 담는다는 점은 똑같습니다. 둘의 진짜 차이는 함수 자신이 이름을 갖느냐입니다. def로 만든 함수는 자기 이름(add_100)을 기억하지만, lambda로 만든 함수는 그런 이름이 없어서 익명 함수라고 부릅니다.7

변환 과정

text
코드 하이라이팅 중…
일반 함수 (def)lambda
def add_100(num):lambda num:
return num + 100num + 100
함수 이름 있음이름 없음 (변수에 저장 가능)8
여러 줄 가능한 줄만 가능
lambda는 단일 표현식만 가능합니다
if문이나 for문 같은 복잡한 로직은 lambda로 작성할 수 없습니다. 복잡한 함수가 필요하면 def를 사용합니다.

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삼항 연산자9 사용 가능

조건 표현식 예시:

python
코드 하이라이팅 중…

map 함수와 lambda

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

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()은 각 요소에 함수를 적용한 결과를 반환한다
map 결과는 반드시 list()로 감싸야 합니다
map()은 map 객체를 반환합니다. print(map(...))은 '<map object at 0x...>'처럼 출력됩니다. list(map(...))으로 감싸야 리스트가 됩니다.

Java와 Python 비교

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

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

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

java
코드 하이라이팅 중…
python
코드 하이라이팅 중…
시험 팁
Java는 화살표(->), Python은 콜론(:)으로 매개변수와 본문을 구분합니다. 두 언어 모두 return 키워드를 생략할 수 있지만, Java는 여러 문장일 때 return이 필요하고 Python은 항상 단일 표현식만 가능합니다.

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

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.

Footnotes

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

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

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

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

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

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

  7. 파이썬에서 def로 만든 함수는 자기 이름을 함수 객체 안 __name__에 기억합니다. 예를 들어 def add_100(num): ...이면 add_100.__name__은 'add_100'입니다. 반면 lambda로 만든 함수는 이름이 없어 __name__이 항상 '<lambda>'입니다. 그래서 lambda를 익명 함수라고 부릅니다. ↩

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

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


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • Java 람다 표현식과 함수형 인터페이스
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999