10. 표현식(Expression)과 람다 표현식(Lambda Expression)

박은서's avatar
Jan 13, 2026
10. 표현식(Expression)과 람다 표현식(Lambda Expression)

1. 표현식(Expression)

1️⃣ 표현식이란?

값을 만들어 내는 코드
실행하면 결과(값)가 나오는 것
즉,
  • “값이 되는 것”
  • “값처럼 사용될 수 있는 것”
➡️ 모두 표현식

2️⃣ 표현식의 예시

1) 리터럴 자체도 표현식

10; "hello"; true;
→ 각각 숫자/문자열/불린 이기 때문

2) 변수 이름도 표현식

x;
→ 실행하면 x에 저장된 값이 결과

3) 연산을 포함해도 표현식

3 + 5; // 8 a * b; // 계산한 결과 x > 10; // true/false

4) 함수 호출도 표현식

sayHello(); add(2, 3);
→ 호출 결과가 이니까 표현식

5) 삼항 조건문도 표현식

age >= 18 ? "성인" : "미성년자";
→ 실행하면 문자열 둘 중 하나가 으로 나옴

6) 대입문도 표현식

x = 10;
결과적으로 10이라는 값이 x에 저장되므로 표현식
(단, 이건 동시에 “문(statement)”이기도 함)

3️⃣ 표현식이 아닌 것은?

1) 문(statement)

실행되지만 값을 만들지 않는 것

2) 예시

if (x > 10) { ... }; while (i < 5) { ... }; function foo() { ... };
➡️ 흐름을 결정하지만 값을 반환하지 않으므로 표현식이 아님

4️⃣ 표현식 vs 문

구분
설명
표현식(Expression)
값을 계산해 내는 코드
1+2, "hi", add(3,4)
문(Statement)
실행 흐름 제어, 명령
if, for, function {}
🔑 핵심 기억:
표현식은 값을 만든다
문은 행동을 지시한다

5️⃣ 표현식의 중요성

JS에서는 값이 필요한 곳에는 표현식이 와야만

예)

변수 대입 오른쪽
let x = 10 + 5;
return 뒤
return a * b;
템플릿 리터럴 내부
`result: ${2 + 3}`
조건 계산
if (n % 2 === 0)
➡ 다 표현식이 들어가는 자리!

6️⃣ 표현식은 상대적 (언어별 기준이 다름)

1) 개념

표현식(Expression)은 값을 만들어 내는 코드지만 어떤 문법이 표현식인지 여부는 언어마다 다름

2) 자바스크립트의 예

  • 3 + 5, "hi", add(3,4)표현식
  • if, for, function 선언값을 만들지 않음 → 문(statement)

3) 다른 언어의 예 (Kotlin, Swift, Rust 등)

if 문이 값을 반환할 수 있음:
val msg = if (age >= 18) "adult" else "minor"
➡ 이 언어에서는 if표현식

4) 결론

  • 표현식인지 아닌지는 코드 모양이 아니라 언어가 어떻게 정의하느냐에 따라 결정됨
즉, 표현식은 상대적 개념이고 언어마다 다르다!

7️⃣ 실습

1) expression의 개념

let x = 10; let n = x==10 ? 3 : 5; // 이건 코드가 끝나면 값이 들어가기 때문에 expression!
➡️ 실행이 되면 값이 되는 것을 표현식이라고 함

2) expression 실습

// 표현식 (expression -> 값으로 평가될 수 있는 코드 조각) let m11 = function m1() { return 1; } let r1 = m11(); // 실행이 되면 값이 되니까, 표현식 console.log(r1);
notion image
➡️ m1은 불릴 일이 없으니까 지워도 됨! 그럼 익명함수라고 함

3) 익명 함수

// 표현식 (expression -> 값으로 평가될 수 있는 코드 조각) let m11 = function() { // 오른쪽을 익명함수라고 함 return 1; } let r1 = m11(); // 실행이 되면 값이 되니까, 표현식(expression) console.log(r1);
 

2. 람다(Lambda)

1️⃣ 람다란?

1) 개념

익명 함수(anonymous function), 즉 이름 없이 정의되는 함수 그 자체
즉,
  • 함수인데 이름이 없고 값처럼 사용 가능한 함수

2) 예 (개념적 표현)

lambda x: x + 1

3) 요약

  • 람다 = 함수(실체)
  • 이름 없는 함수 그 자체를 가리키는 개념
 

3. 람다 표현식(Lambda Expression)

1️⃣ 람다 표현식이란?

1) 개념

람다(익명 함수)를 작성하는 문법(표기법)
함수 문법 대신 짧고 간결한 문법으로 함수를 만드는 표현 방식
즉,
  • 람다를 만드는 코드 형태
  • 람다를 “표현하는 방법”

2) 언어별 예시

Java
(x) -> x + 1
JavaScript (화살표 함수)
es6부터 사용 가능
x => x + 1
Python
lambda x: x + 1

3) 요약

  • 람다 표현식 = 람다를 생성하는 문법
  • 함수의 정의 방식 중 하나

2️⃣ 람다와 람다 표현식 (람다 ≠ 람다 표현식)

1) 람다

  • 이름 없는 함수(익명 함수) → 어떤 코드 조각을 한 번 쓰고 말 것에는 이름 안 붙임
let m1 = function(){}

2) 람다 표현식

  • 이름 없는 함수를 간결하게 표현한 식(어로우 함수. 화살표로 간단하게 표현한 함수)
let m2 = ()=>3;

3️⃣ 실습

// 람다 표현식 (expression -> 값으로 평가될 수 있는 코드 조각) // 함수 값!! let m = function m1(){ return 1; } let m1 = function(){ } // 람다 표현식 (ES6) let m2 = ()=>3; let m3 = (x)=>x+1; let m4 = (x,y)=>{ let r = x+y; return r/2; }; let m5 = (x,y)=>(x+y)/2; // 리턴 값이 없을 수도 있음 let m6 = (x,y)=>{ let r = x+y; };

⚠️ 자바와 람다 표현식

1) 자바에서는 원래 함수(메서드)를 변수에 담을 수 없다

  • 자바는 클래스 기반 언어
  • 메서드는 객체에 소속되고 독립된 값이 아님
  • 따라서 함수가 1급 객체가 아님
int x = foo; // ❌ 불가능 int x = foo(); // ✔ 실행 결과만 저장 가능
➡️ 메서드 호출 결과는 담을 수 있지만 메서드 자체는 못 담음

2) 그래서 그 상태에서는 “람다 표현식”이 존재할 수 없다

  • 함수를 값처럼 다룰 수 없으니
  • *람다(익명 함수)**를 담는 것도 불가능
  • 코드 형태는 표현식일 수 있어도 람다 표현식이 아님

3) 자바8에서 “람다 표현식” 도입

이 문제를 해결하기 위해 등장!
람다 문법:
(x) -> x + 1
람다 등장 후:
  • 함수 값처럼 변수에 저장 가능
  • 함수를 파라미터로 전달 가능
  • 메서드 이름 없이 즉석에서 정의 가능

4) 자바 람다의 장점

함수를 변수에 저장 가능
Function<Integer, Integer> f = x -> x + 1;
익명 함수 사용 가능
클래스를 만들 필요 없음
코드가 엄청 간결해짐
기존 익명 클래스:
Runnable r = new Runnable() { public void run() { System.out.println("hi"); } };
람다로:
Runnable r = () -> System.out.println("hi");
자바 함수형 프로그래밍의 길이 열림
 

4. 변수에 함수를 담는 방법

1️⃣ 방법 (1)

1) 함수의 원형

// 변수에 함수를 담는 방법들 // (1) // 함수의 원형 let m33 = function run() { return 5; }

2) 익명 함수

let m33 = function() { // 오른쪽을 익명 함수라고 함 return 5; }

3) function 삭제, => 추가

let m33 = () => { return 5; } let r3 = m33(); console.log(r3);
notion image

2️⃣ 방법 (2)

1) 함수 원형

let m44 = () => { return 5; }

2) return문, 중괄호{} 삭제

let m44 = () => 5; // let m44 = (x) => x+1; 도 가능 let r4 = m44(); console.log(r4);
notion image

2) 중괄호 생략 불가능한 경우

⚠️ 중괄호 안에 두 줄이 들어가면 중괄호 생략 불가❌
let m55 = () => { console.log("안녕"); return 5; }; let r5 = m55(); console.log(r5);
notion image
 
 
Share article