프로그래밍을 배우다 보면 구문(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 |