구문과 표현식 1부 — 표현식(Expression) 알아보기

2026. 2. 5.컴퓨터/간단지식

프로그래밍을 배우다 보면 구문(Statement)과 표현식(Expression)이란 용어를 간간이 들어봤을 것이다. 이 둘이 대충 코드 일부분을 가리키는 것 같기는 한데 정확하게는 뭔지 모르겠다면 지금부터 함께 알아보자. 구문과 표현식의 개념을 잘 알고 간다면 향후 프로그래밍할 때 좀 더 편할 것이다. 1부에서는 표현식에 대해 다뤄볼 것이다.

 

표현식

'표현식' 또는 '식'은 값으로 평가할 수 있는 코드 조각이다. 컴퓨터는 계산하는 기계이니만큼 계산의 재료가 되는 값은 아주 중요한 요소이다. 표현식은 이런 값이라는 재료를 생산하는 코드라고 볼 수 있다. 표현식에는 대표적으로 27, "Hello", 'A' 같이 대놓고 값을 나타내는 리터럴부터 변수, 연산, 함수 호출 등 다양한 형태가 있다. 여러 표현식이 모여 새로운 표현식을 구성하기도 하는데, 가령 표현식 1 + 2의 경우 숫자 리터럴인 표현식 1과 2로 구성되어 있다.

 

예시

그렇다면 다음 C언어 코드에서 어디가 표현식인지 생각해 보자.

int plus(int x, int y) {
    return x + y;
}

int main() {
    int a, b;
    int (*foo)(int, int);

    a = b = 10;
    foo = plus;

    while (a * b % 7 != 0)
        a = (b++, foo(b, 5));

    return 0;
}

 

아래의 코드는 어느 부분이 표현식이었는지 바로 윗줄에 주석으로 설명해 둔 코드이다.

 

※ 주석에서의 설명은 C언어 기준으로 다른 언어의 경우 같은 코드라도 해석이 조금씩 달라질 수 있다. 특히 대입의 경우 C언어에서는 표현식이지만 아닌 언어도 제법 있으며, 심지어 Python은 표현식인 대입(:=)과 일반 대입(=)이 따로 존재한다.

int plus(int x, int y) {
    // `x + y`는 두 변수값을 더한 값으로 표현식이며 함수의 반환값으로 쓰인다.
    // 표현식 `x + y`에서 변수 `x`와 `y`는 `+`의 피연산자로써 
    // 그 변수가 가지고 있는 값으로 평가되니 표현식이다. 
    return x + y;
}

int main() {
    int a, b;
    int (*foo)(int, int);

    // `10`은 숫자 리터럴로 표현식이다.
    // `b = 10`은 변수 `b`에 값 10을 대입하고 `b`에 대입된 값인 10으로 평가되는 표현식이다.
    // `a = b = 10`에서 변수 `a`에는 표현식 `b = 10`의 값인 10이 대입되며
    // 결과적으로 `a = b = 10`은 `a`에 대입된 값인 10으로 평가되는 표현식이 된다. 
    a = b = 10;

    // 아래의 경우 `plus`는 함수 포인터 변수 `foo`에 대입되기 위해 
    // `plus` 함수의 주소값으로 평가되어 함수 이름인 `plus` 자체가 표현식이 된다.
    // `foo = plus`는 `foo`에 대입된 값으로 평가되는 표현식이다. 
    foo = plus;

    // `a * b % 7 != 0`은 표현식 `a * b % 7`의 값과 `0`의 값을 비교하여
    // 1(참) 또는 0(거짓)이란 값으로 평가되는 표현식으로 반복의 조건으로 쓰인다.
    // 이 외에도 이를 구성하는 `a`, `b`, `7`, `a * b` 모두 표현식이다.
    while (a * b % 7 != 0)
        // `b++`의 경우 원래 `b`의 값으로 평가되는 표현식이며
        // 후에 `b`의 값은 1 증가한다. 
        // `foo(b, 5)`의 경우 `foo`가 가리키는 함수 `plus`가 실행되어 `b`와 5를
        // 더한 값을 반환하는 표현식이다. 이를 구성하는 `b`와 `5`도 표현식이다.
        // `(b++, foo(b, 5))`는 콤마로 나눴을 때 가장 오른쪽 표현식의 
        // 값(여기서는 `foo(b, 5)`)으로 평가되는 표현식으로 `a`에 대입된다.
        // `a = (b++, foo(b, 5))`는 `a`에 대입된 값으로 평가되는 표현식이다. 
        a = (b++, foo(b, 5));

    // `0`은 숫자 리터럴로 표현식이며 함수의 반환값으로 쓰인다.
    return 0;
}

 

void

함수 호출은 호출된 함수의 반환값으로 평가되는 표현식이다. 그렇다면 반환 타입이 void라서 아무런 값을 반환하지 않는 함수의 호출은 표현식일까, 아닐까? 값을 반환하지 않으니 표현식이 아닐 것 같지만 사실 문법적으로 따져보면 표현식이다. 약간 억지 같긴 해도 타입이 void인 즉, 실제로는 존재하지 않는 값으로 평가된다고 볼 수 있다. 다만, 문법적으로는 표현식이라고 할지라도 사실상 타입이 void인 값은 그 어디에도 써먹을 수가 없기에 일반적인 표현식과는 차이가 있다. 때문에 값을 필요로 하지 않으면서 표현식이 올 수 있는 위치, 대표적으로 다음 글에서 알아볼 표현식문으로 많이 쓰인다.

 

마무리

값은 프로그램에서 굉장히 중요한 요소지만 값만 있다면 그 프로그램은 제대로 작동할 수 없다. 프로그램이 작동하기 위해선 이런 값을 실제로 다루고 계산을 실행하는 명령이 필요하다. 다음 글인 2부에서 알아볼 구문이 그 역할을 해줄 것이다.

 

'컴퓨터 > 간단지식' 카테고리의 다른 글

구문과 표현식 2부 — 구문(Statement) 알아보기  (0) 2026.02.18
최상위 도메인 — TLD 알아보기  (0) 2026.01.20
연산자 주변 띄어쓰기  (0) 2026.01.10
아스키 코드표 — ASCII Table  (0) 2026.01.08
'컴퓨터/간단지식' 카테고리의 다른 글
  • 구문과 표현식 2부 — 구문(Statement) 알아보기
  • 최상위 도메인 — TLD 알아보기
  • 연산자 주변 띄어쓰기
  • 아스키 코드표 — ASCII Table
우들 WODEUL
우들 WODEUL
wodeul is wonderful!
  • 우들 WODEUL
    우들의 메모 — wodeul's notes
    우들 WODEUL
  • 전체
    오늘
    어제
    • 분류 전체보기 (6)
      • 컴퓨터 (6)
        • 문제해결 (1)
        • 간단지식 (5)
      • 수과학 (0)
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Ascii Table
    ccTLD
    연산자 주변 공백
    연산자 앞뒤 공백
    tld
    아스키 코드표
    아스키 코드표 벡터
    ASCII Table Vector
    연산자 앞뒤 띄어쓰기
    표현식
    SvelteKit 정적 사이트
    SvelteKit SSG
    아스키 코드표 PDF
    ASCII Table PDF
    구문
    Top-Level Domain
    Expression
    statement
    gTLD
    SvelteKit 빌드
    최상위 도메인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
우들 WODEUL
구문과 표현식 1부 — 표현식(Expression) 알아보기
상단으로

티스토리툴바