구문과 표현식 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바