본문 바로가기
programming/JAVA

람다에서 표현식과 구문의 차이

by buddev 2025. 1. 18.

개요

모던자바 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. 결론

  1. 표현식 람다:
    • 본문이 단일 표현식일 경우, 중괄호 {}return을 생략 가능.
    • 간단한 작업에 적합하며, 가독성이 높음.
  2. 구문 블록 람다:
    • 본문에 여러 구문이 필요하거나 복잡한 로직을 작성할 때 사용.
    • 중괄호 {}와 세미콜론이 필수이며, 반환값이 필요하면 return 명시.
    • 반환값이 필요없을 경우(void), return 생략 가능

댓글