1. 표현식(Expression)
1️⃣ 표현식이란?
값을 만들어 내는 코드실행하면 결과(값)가 나오는 것
즉,
- “값이 되는 것”
- “값처럼 사용될 수 있는 것”
➡️ 모두 표현식
2️⃣ 표현식의 예시
1) 리터럴 자체도 표현식
10;
"hello";
true;→ 각각 숫자/문자열/불린 값이기 때문
2) 변수 이름도 표현식
x;
→ 실행하면 x에 저장된 값이 결과
3) 연산을 포함해도 표현식
3 + 5; // 8
a * b; // 계산한 결과
x > 10; // true/false4) 함수 호출도 표현식
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);
➡️ 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 + 13) 요약
- 람다 = 함수(실체)
- 이름 없는 함수 그 자체를 가리키는 개념
3. 람다 표현식(Lambda Expression)
1️⃣ 람다 표현식이란?
1) 개념
람다(익명 함수)를 작성하는 문법(표기법)
함수 문법 대신 짧고 간결한 문법으로 함수를 만드는 표현 방식
즉,
- 람다를 만드는 코드 형태
- 람다를 “표현하는 방법”
2) 언어별 예시
Java
(x) -> x + 1JavaScript (화살표 함수)
es6부터 사용 가능
x => x + 1Python
lambda x: x + 13) 요약
- 람다 표현식 = 람다를 생성하는 문법
- 함수의 정의 방식 중 하나
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);
2️⃣ 방법 (2)
1) 함수 원형
let m44 = () => {
return 5;
}2) return문, 중괄호{} 삭제
let m44 = () => 5;
// let m44 = (x) => x+1; 도 가능
let r4 = m44();
console.log(r4);
2) 중괄호 생략 불가능한 경우
⚠️ 중괄호 안에 두 줄이 들어가면 중괄호 생략 불가❌
let m55 = () => {
console.log("안녕");
return 5;
};
let r5 = m55();
console.log(r5);
Share article