본문 바로가기

Programming/용어정리

expression, statement, instruction, command 차이 및 번역

expression, statement, instruction (, + command)....

수식, 표현식, 서술문, 문장, 구문, 명령문, 명령어, 명령, ..............

 

아래에 적은 8개의 한글 단어는 모두 위 3(4)개 영어 단어의 번역어이다. 

해당 단어들은 영어로서 그 정의 자체도 비슷비슷해 헷갈리나,

번역어 또한 통일되지 않고 상황에 따라, 번역자에 따라 다르게 번역돼 학습자로 하여금 혼란을 가중시킨다.

 

그리고 공부하다 혼란이 왔던 그 학습자 1로서, 해당 단어들에 대한 정의와 차이점 및 번역어에 대해서 정리해 두려고 한다.

나 같이 용어정리를 확실히 해두고 싶은 사람이나, 아니면 미래의 내가 이 글을 다시 볼 수 있도록 기록하는 게 목표이다.

(이하 코드들은 c로 구현되었다.)

 

1) statement

statement는 unit of a source code that expresses some action 즉 소스 코드의 가장 작은 단위로, 쉽게 말해서 소스코드의 최소한의 조각을 말한다. statement는 두 가지 분류 기준에 따라 종류가 나뉜다.

 

그 첫번째 기준은 statement는 중괄호 여부로, 단일 서술문single statement과 복합 서술문compound statement로 나뉘는데, single statement는 중괄호 없이 세미콜론을 끝으로 갖는 소스코드 조각이다. 그에 비해 복합 서술문은 중괄호를 사용하여 한 개 이상의 단일 서술문을 포함한다.

num = num + 1; // 단일 서술문

num = 
   num + 1; // 두 줄로 이뤄져도 세미클론 나오기 전까진 하나의 단일 서술문임!!
   
num1 = num1 + 10; num2 = num2 + 10; // 한 줄에 두개 사용 가능

 

statement의 또 다른 분류 기준은 그 역할이다. 이는 예시를 통해 바로 파악할 수 있다.

sum = a + b; // 수식 서술문expression statement

if(a > b) // 조건 서술문selection statement
	printf("a is bigger than b"); 

for(i = 0; i < 5; i++) // 반복 서술문iteration statement
	sum += i; 

/*
이건 서술문과 반복 서술문은 내부에 단일 서술문을 두 개 이상 가질 경우는 무조건
중괄호를 사용해 복합 서술문 표기를 해야 하나, 내부에 단일 서술문이 하나 뿐일 때는 
중괄호를 생략해 단일 서술문 문장으로 나타낼 수 있다. 
*/

// 이외에도 라벨 서술문labeled statement, 분기 서술문jump statement, 주석문comment 등이 있다.

 

번역어로는 '서술문', '문장', '구문', '명령문'이 주로 쓰인다. '서술문'과 '명령문'이 비슷한 빈도로 가장 자주 보이고 컴퓨터에게 명령과 지시를 내린다는 역할 때문에 '명령문'으로 번역되어 쓰이는 듯 하나, '명령문'의 경우는 후술할 instruction의 번역어인 '명령어'와 혼동할 수 있기 때문에 되도록 '서술문'이라는 표현을 쓰는 것이 좋겠다.

 

2) expression

expression은 any word or group of words or symbols that is a value 즉 무언가 '값'이 있는 statement면 expression이라고 할 수 있다. 좀 더 expression의 용례에 가깝게 설명하자면, 결과값을 가지는 statement이다. 여기서 알아야 할 건 expression은 statement에 속하는, 하위 범주라는 것이다. 

 

다음 코드들은 모두 expression이다.

7; // 정수 리터럴
"hello world!"; // 문자열 리터럴
1 + 2;
x = 10;
a > b;
Mul(a, b); // 반환값이 있다는 가정 하

 

번역어로는 '수식', '표현식'이 주로 쓰인다. 보통 '표현식'이 더 자주 쓰이는 듯 하나, statement의 일종인 expression statement 에 대해서는 '수식 서술문'으로 수식이란 표현이 관용어처럼 쓰인다(표현식 서술문이란 사용례는 보이지 않는다). '수식' 보다는 값을 표현한단 의미로 '표현식'이 좀 더 이미지가 와닿고 뜻도 직관적으로 다가오는 느낌이다.

 

3) instruction

instruction은 an order given to a computer processor by a computer program로, 컴퓨터가 명령하는 최소한의 단위이다. '컴퓨터가 명령'에서 볼 수 있듯이, 소스 코드가 아닌 컴퓨터 내부 동작 단계에서 사용하는 용어로, 쉽게 말해 소스 코드를 어셈블리어로 나타냈을 때 그 어셈블리어 코드의 한 줄 한 줄이 instruction이라고 할 수 있다. 하나의 statement는 실제 어셈블리어로 변환되면 하나 이상의 instruction로 바뀐다. 즉, statement는 변환 후 최소 한 줄 이상의 instruction가 된다.

 

아래 어셈블리어 코드 한 줄이 각각 하나의 instruction이다

2024.03.15 수정) 컴퓨터 구조 수업을 들으면서, 해당 설명이 잘못되었다는 것을 알게 되었다.

instruction은 컴퓨터가 이해할 수 있는 binary code이다. 즉, 기계어이다. assembly language는 assembler에 의해 instruction으로 번역되는 것 뿐이고, assembly code는 instruction에 equivalent(동등할) 뿐이다.

그러나 한국어권 자료들에선 assembly code들을 예시로 들며 instruction이라고 설명하고 있는데, 잘못된 설명으로 보인다.

pop b
pop a
mov a, 10
push a
push b

 

번역어로는 거의 '명령어'밖에 쓰이지 않는다. 

Lazarus 라는 complier에서 현재 code의 assembly instructions을 출력하는 창 / 출처 : free pascal wiki

4) command

command는 a directive to a computer program to perform a specific task 즉 컴퓨터 프로그램에 보내는 지시인데, 중요한 점은 '유저'가 보내는 명령이라는 점이다. 정확히 말하면 windows의 command prompt, 리눅스 및 유닉스의 shell 등의 command line에 입력하는 것들을 말한다. 흔히 실행에서 cmd를 입력 후  ipconfig 따위를 입력해 본 적이 있을 것이다. command를 줄여서 cmd라고 하며, 윈도우 실행 창에서 cmd를 입력하면 Dos 명령어를 입력 가능하다.

mkdir test
dir /s
ipconfig /all
cls

 

번역어로는 대부분 '명령어' 또는 '명령'으로 번역되며, 전자의 경우로 번역되는 경우가 좀 더 많은 것 같다.(ex. Dos command -> 도스 명령어)

 

이 때, 일부 문서에선 소스 코드상의 printf() 따위도 command에 포함된다고 보는 자료도 있는데, 신뢰성이 의심간다. 따라서 general한 검색 결과인 command line 상의 명령으로 생각하면 될 듯 하다.

command를 입력하기 위한 command line interface 중 windows에서 사용되는, command prompt / cmd.exe로 실행

 

statement, instruction, command의 구별 표현이 타 블로그에 있어 인용하자면, (https://foxtrotin.tistory.com/295) statement는 소프트웨어적 명령 / instruction은 하드웨어적 명령 / command는 유저 명령 이라고 한다. 여기서 유저 명령이라는 부분에, 사용자가 '직접적으로 수행' 이라는 부분을 보면 컴파일러를 통한 statement 입력은 그다지 direct 하다고 여겨지지 않는 듯 하다. 

결론) 헷갈리는 단어들에 대해선 되도록 영어 원문을 쓰자.

표현식이 아닌 expression, 서술문 명령문이 아닌 statement, 명령어가 아닌 instruction, 명령이 아닌 command로 사용하면 / 개념적 차이만 명확히 알고 있다면 번역어의 혼동에서 오는 단점은 영어 원문을 사용해서 극복 가능하다. 

특히, 언급했듯이 statement instruction command 이 세가지는 헷갈리는 사람이 많고, 실제로 내가 여러 블로그 글들을 볼 때도 instruction이 들어가야 할 자리에 '명령문'이란 번역어를 쓰거나 하는 경우들이 있다. 헷갈릴수록 영어 원본 단어를 사용하자.