inblog logo
|
DailyCoding
    Java Script

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

    박은서's avatar
    박은서
    Jan 13, 2026
    10. 표현식(Expression)과 람다 표현식(Lambda Expression)
    Contents
    1. 표현식(Expression)1️⃣ 표현식이란?2️⃣ 표현식의 예시3️⃣ 표현식이 아닌 것은?4️⃣ 표현식 vs 문5️⃣ 표현식의 중요성6️⃣ 표현식은 상대적 (언어별 기준이 다름)7️⃣ 실습2. 람다(Lambda)1️⃣ 람다란?3. 람다 표현식(Lambda Expression)1️⃣ 람다 표현식이란?2️⃣ 람다와 람다 표현식 (람다 ≠ 람다 표현식)3️⃣ 실습⚠️ 자바와 람다 표현식4. 변수에 함수를 담는 방법1️⃣ 방법 (1)2️⃣ 방법 (2)

    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
    Contents
    1. 표현식(Expression)1️⃣ 표현식이란?2️⃣ 표현식의 예시3️⃣ 표현식이 아닌 것은?4️⃣ 표현식 vs 문5️⃣ 표현식의 중요성6️⃣ 표현식은 상대적 (언어별 기준이 다름)7️⃣ 실습2. 람다(Lambda)1️⃣ 람다란?3. 람다 표현식(Lambda Expression)1️⃣ 람다 표현식이란?2️⃣ 람다와 람다 표현식 (람다 ≠ 람다 표현식)3️⃣ 실습⚠️ 자바와 람다 표현식4. 변수에 함수를 담는 방법1️⃣ 방법 (1)2️⃣ 방법 (2)

    DailyCoding

    RSS·Powered by Inblog