Font size: +

프로그래밍의 변수.

 정모때 나왔던 이야기입니다. 프로그래밍에서 변수의 개념을 이해하기가 힘들다고 하셨던 분이 기억납니다.

그 외에, 변수와 함께 따라다니는 자료형도 처음 접하면 이게 뭔 소리인가 싶으신 분이 많을 것 같습니다.

실제로, VEX문서 1개를 번역하여 올려놨지만, 이해하기 힘들었다는 피드백도 받았으니... 


전 개인적으로 누가 제 글을 이해하지 못 했다고 하면 기분이 별로 좋지 않습니다. 

VEX문서 번역 자체는 잘 마무리 지었다고 생각했고, 그 문서의 내용이 바뀌지 않는 이상 번역문에 쓸데없는 사족을 달 필요는 없다고 생각해, 해당 글을 이해하기 위한 배경 지식에 대한 글을 쓰는게 맞다고 판단했습니다.

이하 내용은 같이 프로그래밍 공부하던 친구 중, 프랑스어학과를 나온 친구에게 제가 코딩을 알려줄 때 썼던 방법입니다.


변수란 무엇인가.

변수라 하면, 수학시간에 'f(x) = ax + b와 같은 방정식에서 x를 변수라고 한다'같은 따분한 이야기가 먼저 떠오르시는 분이 많을 거라 생각합니다.

근데 그렇게 복잡하게 생각 할 필요가 없는 개념입니다.


변수란, 단순히 데이터를 저장할 수 있는 공간이라고 생각하시면 됩니다. 다만, 그 공간에 이름을 붙여 놓은거죠. 

저장된 데이터는 자유롭게 수정도 할 수 있습니다.  USB 메모리를 떠올리시면 거의 들어맞습니다. 


그럼, 변수를 언제 쓰는지 궁금하실텐데요.

일단 쓰는 법 부터 알아봅시다. 그 쪽이 이해하기 편합니다.

i 라는 정수형 변수를 0으로 초기화 한 후, 출력해 보았습니다.

아직 함수가 뭔지 잘 모르신다면 5, 6번 줄을 제외한 나머지는 무시해도 좋습니다.

6번 줄은 단순히 i의 현재 값이 어떤지 출력해주는 역할을 합니다.

실질적으로 중요한 부분은 5번 줄입니다. 5번 줄이 무엇을 의미하는지 하나하나 알아보도록 합시다.

1. int 는 이 변수의 자료형이 정수형 이라는 의미입니다. interger의 첫 세 글자를 따왔습니다.

자료형이 뭔지 모르시면 일단 두루뭉슬하게 같은 자료형 끼리는 같은 규칙을 가진 값들만 저장할 수 있다고 알아두세요. 변수에 대한 설명이 끝나면 바로 뒤이어서 설명합니다.


2. i는 이 int형 변수의 이름입니다. i라는 이름을 가졌고, 정수만 저장할 수 있다는 뜻이겠네요. 또한, 이제부터 i라는 이름을 가진 변수를 사용하겠다는 의미도 됩니다. 이 과정을 '변수를 선언한다'라고 합니다.


3. = 등호는 '이제부터 i는 등호 오른쪽에 있는 값으로 변한다'라는 의미입니다. 대입이라 부릅니다.


단 한줄의 코드일 뿐인데, 여러가지 정보를 담고 있습니다.

정수형이며, 이름은 i이고, 지금은 0이 저장되어 있다고 알려주고 있네요.


이제 i에 다른 값을 저장시켜 보겠습니다.

#include <iostream>
using namespace std;

int main(void){
    int i = 0;
    cout << i << endl;
} 

8번줄을 주목합시다.

i = 1. 즉, i는 지금부터 1이라는 의미입니다.

이미 위에서 i가 0일때 출력을 했으니, 지금 저 코드를 실행시키면 0과 1이 출력됩니다.


이렇듯, 변수의 값은 필요할 때 자유롭게 바꿔서 이용할 수 있습니다.


하지만, 단순히 값을 저장하기만 하는 용도로 쓰이지는 않습니다. 바로 다음 예시로 넘어가 봅시다.

#include <iostream>
using namespace std;

int main(void){
    int i = 0;
    cout << i << endl;
    
    i = 1;
    cout << i << endl;
} 

이번에는 변수가 세 가지가 나왔습니다. 

i와 j는 위에서 본 형태랑 다르지 않습니다.


하지만, k의 경우는 생소합니다. 변수에 변수를 대입할 수 있을까요?

당연히 가능합니다. k라는 변수에 i에 저장된 값을 그대로 대입한다고 생각해 봅시다.


i에는 0이 들어있었습니다. 그 값을 k에 그대로 저장합니다. 그렇다면, k는 0이 되겠네요.


l은 이제 변수끼리 서로 + 연산을 한 것을 저장하라고 합니다. 

k에는 0이 있는걸 알았습니다. j는 1이니, l은 1이 되겠네요.

#include <iostream>
using namespace std;

int main(void){
    int i = 0;
    int j = 1;
    
    int k = i;
    cout << k << endl;
    
    int l = j + k;
    cout << l << endl;
    

} 

이번에는 더 이상하게 생긴 코드가 등장합니다.

 i에 i+1을 대입하라고 합니다. 

수학이 먼저 떠오르신 분에겐 저게 도대체 무슨 말도 안 되는 식인지 궁금하실겁니다.


하지만, 저건 수식이 아니라 코드입니다. 수학의 등식과 가장 다른 부분이 바로 이 부분입니다.

위 부분에 쓰인 글을 그대로 다시 가져와 보겠습니다.


3. = 등호는 '이제부터 i는 등호 오른쪽에 있는 값으로 변한다'라는 의미입니다. 대입이라 부릅니다.


이 말을 저 코드에 그대로 적용시켜 본다면....

'이제부터 i는 i+1의 값으로 변한다'/ 라는 뜻이 되겠네요.


i값을 출력하면 어떤 결과가 나올까요?

#include <iostream>
using namespace std;

int main(void){
    int i = 0;
    cout << i << endl;
    
    i = i + 1;
    cout << i << endl;
} 

변수 사용시 주의 사항

 

​이제 변수의 사용법은 얼추 알아본 듯 합니다. 아무래도 변수 사용시 주의사항에 대해서 알아봐야 할 시간인듯 합니다.


옆의 코드는 과연 실행될까요?

실행된다면 어떤 결과가 나올까요?

실행이 안 된다면 무슨 이유 때문일까요?

#include <iostream>
using namespace std;
int main(void){
    cout << i << endl;
     int i;
     
     cout << i << endl;
} 

혼자 북치고 장구치고 하는 기분이라 기분이 묘합니다만, 위 코드는 실행되지 않습니다.


두 가지 문제점이 있습니다.


1.  4번 줄에 i라는 변수를 사용하겠다고 했지만, 에러가 나며 컴파일이 되지 않습니다. 분명 아래에 int i 라고 변수를 선언했는데 말입니다.

사실, 컴퓨터는 코드를 한 줄씩 확인하기 때문에, 어떤 변수를 쓰고 싶으면 반드시 그 전에 사용할 변수를 선언해야 합니다. 그렇기 때문에 4번 줄에서 에러가 납니다.

이걸 해결하려면, 4번 코드 라인 위에 int i를 선언해 주어야 겠죠.

using namespace std;
int main(void){

    int i;
    cout << i << endl;
    int i;

    cout << i << endl;
} 

 애석하게도 이 코드도 실행되지 않습니다. 

같은 이름의 변수 i가 중복되어 선언되어 있기 때문입니다.

자, 중복 선언도 제거했습니다. 하지만 이 코드도 문제가 있습니다.

지금 i의 값이 뭔지 알 수 없기 때문에 i를 사용할 수 없습니다.

변수는 사용하기 전에 무조건 값을 입력해 줘야 합니다.

using namespace std;
int main(void){

    int i;
    cout << i << endl;

} 

​변수에 값을 입력하는 방법은 두 가지가 있습니다.

첫 번째는 초기화라고 부르는 방법으로, 선언과 값 할당을 동시에 하는 방법입니다.

두 번째는 그냥 선언 이후 대입해주면 되는 간단한 방법입니다.


이 두 가지는 기본 자료형에서는 큰 차이가 없으나, 이후 다루게 될 클래스 등의 객체를 다룰 때 큰 차이를 보입니다. 그 차이는 그 때 가서 알아보면 되니 지금은 그냥 다르다고만 알아두세요.

using namespace std;
int main(void){
    
    //변수 초기화를 사용한 최초 값 입력
    int i = 0;
    cout << i << endl;

} 
using namespace std;
int main(void){

    int i;
    //선언 후 대입을 사용한 최초 값 입력
    i = 0;
    cout << i << endl;

} 

정리

 
변수에 대해서 알아봤습니다.


변수는 특정 데이터 타입을 저장할 수 있는 메모리상의 공간을 의미합니다. 

일일히 메모리 주소를 찍어 사용하는건 매우 힘드니, 그 공간에 별명을 붙여 사용하는 겁니다.

변수의 값은 그때그때 필요에 따라 바꿀 수 있습니다. 


변수 사용시 주의사항은 세 가지 입니다.

1. 같은 이름의 변수는 동시에 선언할 수 없다.

2. 변수는 사용하기 전 선언되어야 한다.

3. 변수는 사용하기 전 초기화 되어야 한다.​


이후에 알아봐야 할 것은 변수의 유효범위, 자료형 등이 있겠습니다.

후디니 + 터치디자이너 세미나
Cryptomatte | ID Mattes
 

Comments 2

kimkkakkang on Saturday, 07 April 2018 15:17
감사합니다~

정모 때 얘기 나눴었던 김경찬 입니다. 그때 의견을 들어주시고 이렇게 까지 반영해서 정리 해주실지 몰랐네요. 그 당시엔 언어적으로는 아예 지식이 없어서 이해를 못했지만 조금씩 공부해가며 덕분에 알아가고 있습니다. 이렇게 글 올려주셔서 감사합니다

정모 때 얘기 나눴었던 김경찬 입니다. 그때 의견을 들어주시고 이렇게 까지 반영해서 정리 해주실지 몰랐네요. 그 당시엔 언어적으로는 아예 지식이 없어서 이해를 못했지만 조금씩 공부해가며 덕분에 알아가고 있습니다. 이렇게 글 올려주셔서 감사합니다:D
prisms on Friday, 13 April 2018 16:24
파이썬 기준으로도

설명을 하면 좋겠군요, 언어마다 변수정의하는게 다른데, 파이썬 vs C/C++정도면 정리과 될거 같습니다.

설명을 하면 좋겠군요, 언어마다 변수정의하는게 다른데, 파이썬 vs C/C++정도면 정리과 될거 같습니다.
Already Registered? Login Here
Wednesday, 11 March 2026