개요
모던자바 3장 람다를 공부하다가 생긴 표현식/구문의 차이를 알아봤습니다.
표현식(Expression)과 구문(Statement)의 차이와 람다식에서의 활용
Java에서 표현식과 구문은 코드 작성 시 다른 역할을 합니다. 이를 이해하면 람다식, 메서드 본문, 그리고 반환 규칙을 명확히 알 수 있습니다.
1. 표현식 (Expression)
정의:
- 값을 계산하고 결과를 반환하는 코드 조각.
- 값이 되는 코드로, 다른 코드의 일부로 사용될 수 있음.
- 세미콜론(
;
) 없이 작성.
특징:
- 항상 값을 반환.
- 연산, 변수, 메서드 호출 등이 포함됨.
- 람다식에서 단일 표현식은 암시적으로 반환 가능.
예시:
5 + 3 // 연산 표현식 (결과: 8)
"a" + "b" // 문자열 결합 표현식 (결과: "ab")
Math.sqrt(4) // 메서드 호출 표현식 (결과: 2.0)
System.out.println("Hello") // void 반환 메서드도 표현식으로 간주
2. 구문 (Statement)
정의:
- 어떤 작업(명령)을 수행하는 코드 조각.
- 프로그램 상태를 변경하거나 실행 흐름을 제어.
- 세미콜론(
;
)으로 끝나는 완전한 명령.
특징:
- 값을 반환하지 않음.
- 여러 표현식을 포함할 수 있음.
- 조건문, 반복문, 메서드 호출 등이 구문에 해당.
예시:
int x = 10; // 대입 구문
System.out.println(x); // 메서드 호출 구문
if (x > 5) { // 조건문
x++; // 블록 내부의 구문
}
3. 표현식과 구문의 차이
특징 | 표현식 (Expression) | 구문 (Statement) |
---|---|---|
역할 | 값을 계산하고 반환 | 작업을 수행하거나 상태를 변경 |
값 반환 여부 | 항상 값을 반환 | 반환하지 않음 |
세미콜론 필요 여부 | 필요 없음 | 반드시 세미콜론(; )으로 끝남 |
람다식에서 사용 | 중괄호 없이 사용 가능 중괄호를 사용해도 되지만, 그 경우 구문이 된다. |
중괄호로 감싸야 함 |
4. 람다식에서의 표현식과 구문
(1) 표현식 람다
- 본문이 단일 표현식일 경우, 중괄호와
return
없이 작성 가능. - 컴파일러가 암시적으로 값을 반환하거나 실행.
Runnable r = () -> System.out.println("Hello"); // 단일 표현식
Function<Integer, Integer> square = x -> x * x; // 단일 표현식, 반환값 있음
(2) 구문 블록 람다
- 본문에 중괄호
{}
를 사용하는 경우, 구문 블록으로 간주. - 반환값이 필요한 경우,
return
키워드를 명시적으로 작성. - 블록 내의 각 구문은 세미콜론(
;
)으로 끝나야 함.
Runnable r = () -> {
System.out.println("Hello"); // 구문
};
Function<Integer, Integer> square = x -> {
int result = x * x; // 구문
return result; // 명시적 반환
};
5. 람다식에서 표현식과 구문의 차이점
특징 | 표현식 람다 | 구문 블록 람다 |
---|---|---|
중괄호 사용 여부 | 중괄호 없이 단일 표현식만 작성 가능 | 중괄호 필수, 여러 구문 작성 가능 |
return 키워드 필요 여부 |
암시적으로 반환, return 생략 가능 |
명시적으로 return 작성 필요단, 구문 블록이라도 void 반환형일 경우에는 return을 명시적으로 작성하지 않아도 됨 |
구문 가능 여부 | 단일 표현식만 가능 | 여러 구문 가능 |
예시 | x -> x * x |
x -> { int result = x * x; return result; } |
6. 예제 코드로 정리
표현식 람다:
process(() -> System.out.println("apple")); // 단일 표현식
구문 블록 람다:
process(() -> {
System.out.println("apple");
System.out.println("orange");
});
7. 결론
- 표현식 람다:
- 본문이 단일 표현식일 경우, 중괄호
{}
와return
을 생략 가능. - 간단한 작업에 적합하며, 가독성이 높음.
- 본문이 단일 표현식일 경우, 중괄호
- 구문 블록 람다:
- 본문에 여러 구문이 필요하거나 복잡한 로직을 작성할 때 사용.
- 중괄호
{}
와 세미콜론이 필수이며, 반환값이 필요하면return
명시. - 반환값이 필요없을 경우(void), return 생략 가능
'programming > JAVA' 카테고리의 다른 글
Runnable과 Callable의 차이 (0) | 2025.01.18 |
---|---|
추상메서드에 abstract 키워드가 없는 이유 (0) | 2025.01.18 |
java) comparable, comparator의 비교 (0) | 2024.12.04 |
checked/unchecked Exception / @Transactional rollback (0) | 2023.05.06 |
자바의정석 14장. Optional 정리 (0) | 2022.02.24 |
댓글