5. 변수 만들고 사용하기

  • 30 minutes to read

프로그램에서 사용되는 많은 데이터는 데이터 타입(Data Type)을 가지고 변수(Variable) 또는 상수(Constant)라는 곳에 저장되어 사용됩니다. 이번 강의는 프로그래밍의 가장 기본적인 데이터 타입과 변수에 대한 내용을 다루도록 하겠습니다.

> // 변수(Variable): 프로그램에서 사용할 데이터를 임시로 저장해 놓는 그릇

1. 변수(Variable)

프로그램에서 값을 다루려면 사용할 데이터를 메모리에 잠시 보관해 놓고 사용하기 위한 임시 저장 공간이 필요합니다. 이때 변수(Variable)를 사용합니다. 이러한 변수를 사용하려면 먼저 선언해야 하는데, 데이터를 담아 놓을 그릇(컨테이너)을 만드는 작업이라고 생각하면 됩니다.

변수를 만들 때에는 변수 이름과 값 그리고 데이터 타입(형식, 유형)이 필요합니다.

TIP

박용준 강사의 강의에서는 데이터 형식, 데이터 타입, 데이터 유형, 자료형을 같은 단어로 표현하겠습니다.

변수는 다음처럼 선언할 수 있습니다. 변수 선언에 대한 내용을 그림으로 표현해보면 다음과 같습니다.

그림: 변수 선언하기 및 메모리 표현

변수 선언하기

C 언어에서 변수를 선언할 때, 데이터 타입을 먼저 명시한 후 변수 이름을 지정합니다. 선언문은 ;(세미콜론)으로 끝나며, 이는 문장의 완결을 의미합니다. 여러 데이터 타입이 있어 숫자와 문자 등의 값을 표현하는 데 사용됩니다. 정수 데이터 타입을 지정할 때는 int라는 키워드를 사용합니다. 예를 들어, number라는 이름의 변수에 정수 데이터 타입을 할당하면, 1, 2, 3, 0, -1, -2 등의 정수형 데이터를 저장할 수 있는 메모리 공간이 할당됩니다.

2. 데이터 타입(Data Type)

C 언어에서 변수를 정의할 때 사용되는 주요 데이터 타입에는 문자(char), 정수(int), 실수(double), 그리고 문자열이 있습니다. 이들은 변수에 저장될 데이터의 종류와 크기를 결정하는 중요한 역할을 합니다. 여기서 소개하는 데이터 타입은 C 언어 프로그래밍의 기본이며, 이에 대한 이해는 후속 학습의 기반이 됩니다.

다음 표는 C 언어에서 자주 사용되는 데이터 타입들을 요약한 것입니다. 이 데이터 타입들은 프로그램 내에서 다양한 데이터를 처리하는 데 필수적입니다.

데이터 타입 설명
int 정수형 데이터를 저장하며, 하드웨어에 따라 크기가 달라질 수 있습니다.
char 문자 데이터를 저장하며, 1 바이트(8 비트) 단위로 문자 하나를 저장합니다.
bool 논리 데이터(참/거짓)를 저장합니다. C 표준에서는 직접 제공하지 않으나, stdbool.h를 통해 사용할 수 있습니다.
double 실수형 데이터를 저장합니다. float는 더 작은 범위와 정밀도의 실수를 저장합니다.

이 표에 나열된 각 데이터 타입에 대해, 향후 학습 과정에서 더 자세히 배우게 됩니다.

C 언어에서 기본적으로 제공하는 이러한 데이터 타입들은 기본 형식(Primitive Type)이라고 불립니다. 이와 대비되어, 구조체와 같은 사용자가 직접 정의할 수 있는 새로운 데이터 타입들은 사용자 정의 형식(User Defined Type)으로 분류됩니다. 이러한 형식들을 통해 더 복잡한 데이터 구조를 표현할 수 있게 됩니다.

3. 변수 이름 짓기

변수를 사용하기 위해서는 각 변수에 적절한 이름을 부여해야 합니다. 변수 이름을 지정할 때는 몇 가지 규칙을 따라야 하며, 이 규칙들은 프로그래밍을 학습하는 과정에서 자연스럽게 익히게 됩니다.

변수 이름을 지정할 때 지켜야 할 주요 규칙은 다음과 같습니다:

  • 변수 이름은 반드시 문자로 시작해야 하며, 숫자로 시작할 수 없습니다.
  • 공백 문자는 포함될 수 없습니다.
  • 변수 이름은 영문자, 숫자, 밑줄(_)로 구성될 수 있으며, 기타 특수문자는 사용할 수 없습니다.
  • C 언어의 예약어(키워드), 예를 들어 int, main, void, return 등은 변수 이름으로 사용할 수 없습니다.
  • 변수 이름에서 대소문자는 구분되며, 일반적으로 변수 이름은 소문자로 시작하는 것이 관례입니다.

C 언어에서 사용되는 예약어 목록은 다음과 같습니다:

  • 제어문: if, else, switch, case, default, break, continue, for, do, while, goto
  • 데이터 타입: int, char, double, float, long, short, signed, unsigned
  • 기타: auto, extern, register, static, const, sizeof, typedef, volatile, enum, struct, union, return, void

이 예약어 목록에 포함된 단어들은 변수, 함수, 또는 다른 식별자의 이름으로 사용할 수 없으며, 이들은 향후 학습 과정에서 자세히 다루게 됩니다. 초기 단계에서는 예약어가 존재한다는 사실만 알아두고, 실제 프로그래밍 시에는 이를 피하여 다른 이름을 사용해야 합니다.

4. 변수 선언과 사용

변수를 사용하기 위해서는 먼저 선언한 후, 필요한 값으로 초기화해야 합니다. 변수에 값을 저장하는 과정을 변수에 값 대입 또는 할당이라고 합니다. 초기 선언 후, 변수에 값을 할당하는 방법은 다음과 같습니다.

변수 선언과 값 할당 과정을 도식화하면 다음 이미지와 같습니다:

  • 그림: 변수 만들고 값 할당

변수 만들고 값 할당

변수에 값이 할당된 후의 메모리 상태를 시각화하면 다음과 같습니다. 여기서는 number라는 이름의 정수형 변수에 7이라는 값을 할당한 상태를 보여줍니다:

  • 그림: number 변수에 7을 할당한 후의 메모리 상태

number 변수에 7을 할당한 후의 메모리 상태

위에서 설명한 변수 선언 및 할당 과정을 코드로 구현하면 아래와 같습니다. 이 코드를 작성하고 실행하여 결과를 확인해 보세요.

코드 예제: variable.c

// 변수(Variable) 사용 예제
#include <stdio.h>

int main(void)
{
    int number; // [1] 정수형 변수 선언
    number = 7; // [2] 변수에 값 할당
    printf("%d\n", number); // [3] 변수의 값을 출력

    return 0;
}
7
  • [1]에서는 number라는 이름의 정수형(int) 변수를 선언합니다.
  • [2]에서는 number 변수에 7이라는 값을 할당합니다. 값을 할당할 때는 대입 연산자(=)를 사용합니다.
  • [3]에서는 printf() 함수를 이용하여 number 변수에 저장된 값을 출력합니다.

변수 선언 및 할당을 통해 프로그램에서 다양한 데이터를 효과적으로 관리할 수 있습니다.

5. 리터럴의 사용

리터럴은 코드 내에서 직접 사용되는 고정된 값으로, 정수, 문자열, 실수 등 다양한 타입의 데이터를 포함합니다. 특별한 경우로 '값이 없음'을 나타내는 널(NULL) 리터럴도 존재합니다. 리터럴은 변수에 할당될 수 있으며, 상수로도 간주됩니다.

리터럴 사용 예제

다음은 정수, 실수, 문자, 문자열 리터럴을 사용하는 방법을 보여주는 코드 예제입니다.

코드 예제: literal.c

#include <stdio.h>

int main(void)
{
    printf("%d\n", 1234);    // 정수 리터럴
    printf("%.2f\n", 3.14F); // 실수 리터럴
    printf("%c\n", 'A');     // 문자 리터럴
    printf("%s\n", "HELLO"); // 문자열 리터럴

    return 0;
}

실행 결과:

1234
3.14
A
HELLO

문자열 리터럴

문자열 리터럴은 큰따옴표(")로 묶은 문자들의 집합입니다. C 언어에서는 문자열을 직접 코드 내에 포함시켜 사용할 수 있습니다.

코드 예제: string_literal.c

#include <stdio.h>

int main(void) 
{
    printf("%s, %s\n", "C Language", "Hello, World!"); // 문자열 리터럴 예제
}

실행 결과:

C Language, Hello, World!

다양한 리터럴 종류

리터럴은 프로그램에서 직접 사용되는 고정값으로, 여기에는 정수, 실수, 문자, 문자열 외에도 다양한 타입이 있습니다. NULL 리터럴은 '값이 없음'을 나타내는 특별한 리터럴로, C 언어에서 중요한 역할을 합니다.

코드 예제: literal_more.c

#include <stdio.h>

int main(void)
{
    // 다양한 리터럴 예시
    printf("%d\n", 1234);          // 정수 리터럴
    printf("%d\n", 99);            // 10진 정수 리터럴
    printf("0%o\n", 012);          // 8진 정수 리터럴
    printf("0x%X\n", 0x1A);        // 16진 정수 리터럴
    printf("%f\n", 0.12f);         // 실수 리터럴 (소수점 표기)
    printf("%f\n", 0.34f);         // 실수 리터럴 (소수점 표기)
    printf("%f\n", 0.56F);         // 실수 리터럴 (소수점 표기)
    printf("%f\n", 1.0e-3f);       // 실수 리터럴 (지수 표기법)
    printf("%f\n", 1.0E-3F);       // 실수 리터럴 (지수 표기법)
    printf("%c\n", 'C');           // 문자 리터럴
    printf("%s\n", "C language");  // 문자열 리터럴
    printf("%p\n", NULL);          // NULL 리터럴

    return 0;
}

실행 결과:

1234
99
012
0x1A
0.120000
0.340000
0.560000
0.001000
0.001000
C
C language
00000000 (실제 출력값은 실행 환경에 따라 달라질 수 있음)

이 코드 예제들을 통해 C 언어에서 리터럴이 어떻게 사용되는지 알 수 있습니다.

6. 변수 생성 및 사용 실습

소개

Visual Studio에서 콘솔 응용 프로그램 프로젝트를 만들고 변수를 만들고 사용하는 예제를 만들어 보겠습니다.

따라하기

(1) 새로운 C 언어 콘솔 프로젝트를 다음과 같이 생성합니다. 참고로 C 언어에서는 프로젝트 이름 및 C 언어 파일에 한글도 사용할 수 있습니다.

프로젝트 형식 템플릿 이름 위치
C/C++ 빈 프로젝트 VariableNote C:\C

(2) Visual Studio의 솔루션 탐색기에서 variable_note.c 파일을 추가합니다.

코드: variable_note.c

//[?] 변수(Variable): 프로그램에서 사용할 데이터를 저장해 놓는 그릇
#include <stdio.h>

int main(void)
{
    //[1] 변수 만들기(선언)
    int i; // i 이름으로 변수 만들기

    //[2] 변수에 값을 저장하기(대입, 할당)
    i = 1234;

    //[3] 변수에 들어 있는 값 사용하기(참조)
    printf("%d\n", i); // 1234

    return 0;
}
1234

(3) 변수 i에 들어 있는 값인 1234가 화면에 출력됩니다.

  1. int 키워드를 사용하여 i라는 이름의 정수를 담을 수 있는 그릇을 만듭니다. 변수를 만드는 작업을 “변수를 선언한다”라고 표현합니다. 처음 작성하는 예제이기에 i라는 변수를 사용하지만 일반적으로 의미있는 변수 이름을 사용합니다.
  2. 정수형 변수 i에 등호(=) 기호를 사용하여 1234를 저장합니다. 변수에 값을 저장하는 것을 변수 초기화, 변수에 값 대입, 변수에 값 할당 등으로 표현합니다.
  3. 변수를 선언했으니 printf() 함수로 변수의 값을 출력합니다. 이처럼 변수의 값을 사용하는 것을 “변수를 참조한다”라고 표현합니다.

마무리

다음처럼 변수를 선언하면서 값을 바로 지정할 수도 있습니다.

int i = 1234;

7. 쓰레기 값 처리

C 언어에서 변수를 선언했으나 초기화하지 않으면, 그 변수는 쓰레기 값으로 채워집니다. 이는 프로그램의 예측 불가능한 동작을 초래할 수 있습니다. 최신 컴파일러들은 이러한 문제를 방지하기 위해 변수의 명시적 초기화를 강제하고 있습니다.

코드 예제: garbage.c

#include <stdio.h>

int main(void)
{
    int number;

    // 변수를 명시적으로 초기화
    number = 1234;

    // 초기화하지 않은 변수를 사용하려고 하면, 최신 개발 환경에서는 실행 오류가 발생할 수 있음
    printf("변수 number의 값: %d\n", number);

    return 0;
}
변수 number의 값: 1234

이 코드에서 number 변수에 값을 할당하지 않고 실행할 경우, Visual Studio와 같은 현대의 개발 도구들은 이를 오류로 간주하고 프로그램을 실행하지 않을 수 있습니다. 따라서 안정적인 프로그램 작성을 위해 변수를 사용하기 전에 반드시 초기화하는 것이 중요합니다.

8. 변수 선언과 동시에 초기화

이번 예제에서는 변수를 선언과 동시에 값을 할당하여 초기화해주는 내용을 다뤄보겠습니다.

변수 초기화란 변수가 선언되면 메모리 공간에 변수 이름으로 변수가 만들어지는데 처음에는 쓰레깃값이 저장되어 있습니다.

이곳에 실제 사용할 값을 저장하는 것을 초기화라고 합니다.

다음 그림은 변수를 선언하고 초기화하는 표현한 것입니다.

그림: 변수 선언과 동시에 초기화

변수 선언과 동시에 초기화

변수를 만들고 바로 값을 초기화 한 후 사용하는 예제를 만들어보겠습니다. 다음 코드를 소스 코드 편집창에 입력한 뒤 실행해보세요.

코드: variable_demo.c

#include <stdio.h>

int main(void)
{
    int number = 7; //[1] 변수 선언과 동시에 초기화 
    printf("%d\n", number);

    return 0;
}
7

int 키워드를 사용하여 number 이름의 정수를 저장할 수 있는 변수를 생성하고 값으로 7을 대입한 후 콘솔 화면에 출력해 보는 내용이었습니다.

지역 변수 사용 예

코드 파일: LocalVariable.c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int j;
    int k;

    // 지역 변수에 값 할당
    i = 1234;
    j = 2345;
    k = 3456;

    // 할당된 값을 사용하여 계산하고 결과 출력
    printf("%d\n", i + j + k); // 출력 결과: 7035

    // 프로그램 실행을 일시 중단, 사용자의 입력을 기다림
    system("pause");

    return 0;
}
7035

이 코드는 세 개의 지역 변수 i, j, k를 선언하고 각각에 값을 할당한 다음, 이들의 합을 계산하여 출력하는 간단한 예제입니다. system("pause")는 프로그램의 실행을 일시 중지시켜 결과를 확인할 수 있게 합니다.

콤마 기준으로 여러 개의 변수 동시 생성

C 언어에서는 콤마(,)를 사용하여 여러 변수를 동시에 선언하고 초기화할 수 있습니다. 이 방법은 코드를 간결하게 만들고, 변수 초기화를 보다 명확하게 표현할 수 있게 도와줍니다.

코드 예제: variable_initialize.c

#include <stdio.h>

int main(void)
{
    // 변수 선언과 동시에 초기화
    int first = 10;

    // 콤마를 사용해 여러 변수 동시에 선언 및 초기화
    int second = 20, third = 30;

    printf("%d, %d, %d\n", first, second, third);

    return 0;
}
10, 20, 30

위 예제에서는 첫 번째 변수를 단독으로 선언하고 초기화하며, 이어서 두 번째와 세 번째 변수를 콤마를 사용하여 한 줄에 선언하고 초기화합니다. 이렇게 함으로써 프로그램의 가독성을 높이고, 초기화 과정을 간소화할 수 있습니다.

참고: 실수 데이터를 int 형식 변수에 저장하기

실수 데이터를 int 형 변수에 저장하려 할 때, 실수의 소수점 이하 부분은 제거되고 정수 부분만 저장됩니다. 예를 들어, int 형식의 변수 number3.14 값을 할당하면, 소수점 이하가 생략되어 number3만 저장합니다.

코드 예제: integer_value.c

#include <stdio.h>

int main(void)
{
    // 정수 데이터 저장
    int number = 3.14; // 소수점 이하 데이터는 제거됨
    printf("%d\n", number); // 출력 결과: 3

    return 0;
}
3

이 특성을 이해하는 것은 데이터 유형 간 변환과 관련된 버그를 예방하는 데 중요합니다.

9. 동일 타입 변수의 일괄 선언

C 언어에서 같은 데이터 타입의 변수를 콤마(,)로 구분하여 한 번에 여러 개 선언하는 방법을 소개합니다. 이 방식은 코드의 간결성을 높이고, 변수 선언 시 편의성을 제공합니다.

> 데이터 타입 변수1, 변수2, 변수3;

다음 그림처럼 따로 따로 변수를 선언하는 방법과 동일하게 콤마를 구분으로 여러 개의 변수를 선언할 수 있습니다.

[그림] 같은 데이터 타입을 가지는 3개의 변수 선언하기

같은 데이터 타입을 가지는 3개의 변수 선언하기

이 방식을 사용하면, 같은 데이터 타입을 가진 여러 변수를 한 줄에 선언하여 코드의 가독성을 향상시킬 수 있습니다.

10. 콤마로 변수 일괄 선언

동일한 데이터 타입의 여러 변수를 콤마 기호를 이용해 한 줄에 선언하는 방법에 대해 알아봅니다. 아래의 예제 코드를 참고하여 실행해 보세요.

코드 예제: variable_comma.c

//[?] 콤마를 사용하여 동일 데이터 타입을 갖는 변수 여러 개 만들기
#include <stdio.h>

int main(void)
{
    //[1] 콤마(,) 기호로 여러 개의 변수 선언
    int number1, number2, number3;

    number1 = 1; // 변수 number1에 1 할당
    number2 = 2; // 변수 number2에 2 할당
    number3 = 3; // 변수 number3에 3 할당

    printf("%d, %d, %d", number1, number2, number3);

    return 0;
}
1, 2, 3

이 방법을 사용하면, 코드를 더 간결하게 작성할 수 있으며, 동일한 데이터 타입의 변수가 여럿 필요할 때 유용합니다. 다른 데이터 타입의 변수를 선언할 때는 각각 별도로 선언해야 합니다.

11. 동일 값으로 여러 변수 초기화

여러 변수를 동일한 값으로 초기화할 때는 = 연산자를 연쇄적으로 사용하여 a = b = c = 10;과 같은 형태로 초기화할 수 있습니다. 이 방법은 코드를 간결하게 만들고, 초기화 값을 일관되게 유지할 때 유용합니다.

코드 예제: variable_same_value.c

#include <stdio.h>

int main(void)
{
    int a, b, c;

    //[1] 여러 개의 변수를 동시에 같은 값으로 초기화
    a = b = c = 10;

    printf("%d, %d, %d\n", a, b, c);

    return 0;
}
10, 10, 10

그러나 최근의 프로그래밍 관례에서는 각 변수를 개별적으로 선언하고 초기화하는 방식을 더 선호합니다.

12. 계산식을 통한 값 대입

변수에 값을 대입할 때 계산식을 사용할 수 있으며, 계산식은 필요에 따라 소괄호로 묶을 수 있습니다. 이 방법을 통해 계산 결과를 변수에 직접 할당할 수 있습니다.

코드 예제: calculation.c

#include <stdio.h>

int main(void)
{
    int calc = 0;
    calc = (3 + 5); // 계산 결과를 변수에 할당

    printf("3 + 5 = %d\n", calc); // 출력: 3 + 5 = 8

    return 0;
}
3 + 5 = 8

이러한 방식은 변수에 복잡한 계산 결과를 저장하고 코드의 가독성을 높이는 데 도움을 줍니다.

13. 변수 명명 규칙과 표기법

변수 명명 시 사용되는 다양한 표기법에 대해 알아보겠습니다. 주로 사용되는 표기법은 헝가리안 표기법, 파스칼 표기법, 낙타 표기법, 스네이크 표기법 등이 있습니다.

  • 헝가리안 표기법: 변수 이름 앞에 데이터 타입을 나타내는 접두사를 붙입니다.
    • 예: int intNum = 0;int 타입의 변수 앞에 접두사로 int를 붙임.
  • 파스칼 표기법: 각 단어의 첫 글자를 대문자로 시작합니다.
    • 예: int MyNumber = 0; – 변수명의 각 단어 첫 글자를 대문자로 표기. 클래스 이름에도 사용됩니다.
  • 낙타 표기법: 첫 단어를 제외한 각 단어의 첫 글자를 대문자로 시작합니다.
    • 예: int myNumber = 0; – 첫 단어는 소문자로 시작하고 이후 단어는 대문자로 시작합니다.
  • 스네이크 표기법: 단어 사이를 언더스코어(_)로 구분합니다.
    • 예: int my_number = 0; – 각 단어를 _로 구분합니다.

변수 명명 스타일은 가이드라인에 불과하며, 필수적으로 따라야 하는 규칙은 아닙니다. 그러나 C 언어 개발 시 스네이크 표기법이 선호됩니다.

14. 상수 사용하기 – const 키워드

const 키워드를 변수 선언 앞에 붙이면, 해당 변수는 상수가 되어 한 번 초기화된 이후 값이 변경되지 않습니다. 상수는 프로그램 내에서 변하지 않는 값을 정의할 때 사용됩니다.

코드 예제: constant_demo.c

//[?] 상수(Constant): 변하지 않는 변수, 읽기 전용 변수
#include <stdio.h>

int main(void)
{
    const int MAX = 100;        // 정수형 상수, 선언과 동시에 초기화
    const double PI = 3.14;     // 실수형 상수, 선언과 동시에 초기화
    const char GRADE = 'A';     // 문자형 상수, 선언과 동시에 초기화

    printf("%d, %.2lf, %c\n", MAX, PI, GRADE); // 출력: 100, 3.14, A

    return 0;
}
100, 3.14, A

상수는 선언과 동시에 초기화되며, 한번 설정된 값은 변경할 수 없습니다. int, double, char 등 모든 데이터 타입에 const를 사용해 상수를 정의할 수 있습니다. 상수를 사용하면 프로그램의 의도를 명확하게 전달하고, 실수로 값이 변경되는 것을 방지할 수 있습니다.

상수를 한 줄로 정의하기

상수는 변하지 않는 값으로, 일단 선언되고 초기화되면 그 값을 변경할 수 없는 '읽기 전용 변수'입니다. 이를 통해 프로그램 내에서 변경되지 않아야 하는 값들을 안전하게 관리할 수 있습니다.

코드 예제: 상수_한줄정의.c

//[!] 상수(Constant): 변하지 않는 변수, 읽기 전용 변수
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    //[1] 상수 선언과 동시에 초기화
    const double PI = 3.14;

    //[2] 상수 사용
    printf("%.2f\n", PI); // 출력: 3.14

    system("pause");
}
3.14

이 예제에서 PIconst 키워드를 사용하여 상수로 선언되었으며, 원주율의 근사값으로 초기화되었습니다. 이후 프로그램 내에서 PI의 값은 변경할 수 없으며, 이러한 특성은 프로그램의 안정성과 예측 가능성을 높입니다.

용어: Immutable

TIP

Immutable

프로그래밍 환경에서 자주 나오는 용어 중에는 MutabilityImmutable이 있습니다. Mutability변할 수 있는 의미로 변수와 같고, Immutable변할 수 없는 의미로 상수와 같습니다.

요약

변수는 프로그래밍에서 데이터를 임시로 저장하는 용도로 사용되며, 하나의 이름으로 하나의 데이터 타입의 값을 보관합니다. 이 장에서는 변수의 개념과 함께, 다양한 데이터 타입과 변수를 선언하고 사용하는 방법에 대해 알아보았습니다. 계속해서 여러 데이터 타입에 대해 더 자세히 살펴보겠습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com