[C] TIL 2. 자료형의 정의와 변수


  1. 변수와 상수에 대해서 기술해라.
  2. 변수를 이루는 세가지 요소를 적어라.
  3. 자료형의 정의는 무엇인가.


inflearn독하게 시작하는 C프로그래밍강의와 C기초 플로스 6판을 기초로하여 정리한 필기입니다. 😀


들어가기 전에 먼저 알았면 좋은 개념이 있다. 비트(bit), 바이트(byte), 워드(word)가 이에 해당한다. 이들은 컴퓨터의 데이터 단위 혹은 컴퓨터의 메모리 단위를 표시하는 데 사용된다. 여기서 우리가 알아야 하는 것은 컴퓨터의 메모리 단위이다.

비트(bit)는 메모리의 가장 작은 단위이다. 비트는 0 또는 1 두 값 중 하나만 저장할 수 있다. 비트에는 많은 정보를 저장할 수 없지만, 컴퓨터 메모리의 기본 구성요소이기 때문에 컴퓨터에는 엄청난 양의 비트가 있다.

바이트(byte)는 컴퓨터 메모리의 통상적인 단위이다. 대부분의 컴퓨터에서 1byte는 8bit이다. 8bit로 구성된 1byte는 0과 1로 짜인 비트 패턴을 나타낼 수 있는 가짓수가 256(2의 8승)이 된다.

워드(word)는 특정 컴퓨터를 설계할 때 정해지는 고유 메모리 단위이다. Mac과 같은 8bit 마이크로컴퓨터에서 워드는 8bit이다. 지금은 16bit word, 32bit word를 거쳐 64bit까지 발전했다. 더 큰 word는 데이터를 더 빠르게 옮길 수 있고, 더 많이 메모리에 접근할 수 있다.

1. 자료형의 정의

자료형(data type)은 B 언어와 C언어를 가르는 기준이었다. B 언어에도 자료형이 아예 없었던 것은 아니지만, C만큼은 아닐 것으로 판단된다. 여하튼, 이런 자료형으로 성패가 갈렸다는 것이다. 자료형의 뜻은 일정 길이의 메모리에 저장된 정보를 해석하는 방법이다.

title

자료는 모두 숫자의 형태를 하고 있다. 컴퓨터는 전자식 계산이다. 즉, 전기로 이루어져 있기 때문에 상태가 “꺼졌다.”, “켜졌다” 밖에 없다는 것이다. 그렇기 때문에 0과 1로 이루어진 2진법이 기계어로 사용된다. 위 그림은 스위치가 총 두 개기 때문에 2bit이다. (1bit라는 건 스위치가 1개라는 것이기 때문이다) 4bit가 있으면 나올 수 있는 경우의 수는 24개가 된다.

우리는 일상생활에서 32bit라는 말을 많이 보게 된다. 당장 우리가 가장 많이 사용하는 윈도우 운영체제도 32bit와 64bit 두 종류가 있다. 왜 32bit와 64bit로 나눌까. 32bit는 2³²이고, 이것을 계산하면 약 42.95억이 된다. 이것을 또 1025(1GB가 1025bit 즉, 2의 10승이다.)로 나누면 KB 단위가 된다. 이렇게 구해진 것을 1025로 한 번 더 나누면 MB, 또 나누면 GB가 된다. 그래서 2³²를 계산하고 나면 4GB가 된다. 그래서 32bit-APP라고 하면 4GB가 메모리의 사용 범위가 된다. 만약 컴퓨터 성능을 놓게 하여 8GB, 더 나아가 32GB로 한다고 하더라도, 운영체제가 32bit 라고 하면, 4GB 메모리만 사용한다. 64bit는 2의 64승이며, 계산하면 16 EB가 된다. 단위는 Bit → Byte→ KB→ MB→ GB → TB → PB → EB → ZB → YB까지 있다.

title

자료(혹은 정보)는 전기적 신호 형태인 0과 1로 이루어진 숫자로 되어있다. 이것을 보관하는 곳을 메모리라 하고, 우리는 이 메모리를 열람하고 그 안에 있는 자료를 가지고 오기도, 혹은 저장하기도 해야 할 것 같다. 이때, 관리를 쉽게 하기 위해서 메모리에 번호를 붙였다. 흡사 위 사진과 같은 사물함처럼 말이다.

title

위는 Ram이라고 하는 물리적인 침이다. 컴퓨터나 스마트폰의 하드 드라이브를 구성하고 있으며, 이 검은 칩들은 일정 크기의 바이트 집단인 메모리에 해당한다.

title

주소란 위치정보를 뜻한다. 위 사진처럼 각 1byte마다 번호를 부여하는 실제로는 16진수로 표현되어있다. (ex. 0x12345678)이 1byte 공간에는 보통 영문 1자를 저장하는데 필요한 크기이다. 즉, 영문 1자를 저장하는 공간마다 메모리 주소를 부여하고 그것을 통해 식별해낸다.

이러한 것까지 알이야 하는 이유는 이것을 바탕으로 디버깅부터 시작해서 정보를 해석할 때도 제대로 할 수 있기 때문에다.



2. 변수와 상수

컴퓨터는 전화를 걸고, 혜성의 궤도를 계산하고 등과 같은 우리가 상상할 수 있는 모든 일을 할 수 있다. 그리고 컴퓨터는 이러한 일을 할 때, 데이터(data)를 가지고 작업을 한다. 데이터는 정보를 담고 있는 수와 문자들이다. 그리고 데이터는 그 성격에 따라 변수와 상수로 나눌 수 있다. 상수란, 프로그램이 사용되기 전에 값이 미리 정해지지 않으며, 프로그램이 실행되는 동안에도 변하지 않고 유지된다. 반면에 변수는 아직 확정되지 않아 프로그램이 실행되는 동안 값이 변하거나 값이 대입되는 것를 말한다.

/*  원의 넓이를 구하는 프로그램  */
#include<stdio.h>

int main(void)
{
    int radius;
    float areaOfCircle;
    
    printf("구하고자 하는 원의 반지름은 몇 센친가요? : ");
    scanf("%i", &radius);
    areaOfCircle = 3.141592 * radius * radius;
    printf("반지름이 %i인 ", radius);
    printf("원의 넓이는 %f입니다.\n", areaOfCircle);
    
    return 0;    
}

위 프로그램에서는 radiusareaOfcircle이 변수에 해당하고, 3.141592이 상수에 해당한다.

변수 정의

C 언어에서 변수의 본질은 메모리이기 때문에, 변수는 메모리를 구현한다.

title

C 언어에서 변수의 본질은 메모리이기 때문에, 변수는 메모리를 구현한다. 이 메모리는 주소를 가지고 있고, 변수를 선언할 때는 이름을 붙인다. 그리고 이 메모리는 그릇과도 같은 존재라서 정보, 혹은 숫자, 자료 같은 데이터를 담는다. 밥은 밥그릇에 넣 듯. 변수에는 그에 맞는 데이터를 넣어야 한다. 변수 앞에 붙은 자료형과 변수에 넣은 데이터의 자료형이 일치할 때 값을 메모리에 저장하고 이름을 붙여 사용할 수 있는 것이다.

식별자(identifier)

이러한 변수는 의미 있는 이름(식별자)를 선택해야한다. 이름만으로 부족하다면 주석을 사용하여 그 변수가 무엇을 나타내는지 설명하는 것이 좋다. 그리고 식별자에는 몇가지 법칙이 있다.

① 대문자, 소문자, 숫자, 밑줄(_)을 임의로 조합하여 사용할 수 있다.

② 첫 문자는 반드시 영문자나 밑줄을 사용해야 한다.

③ 하나 또는 두 개의 밑줄 문자로 시작하는 것은 피하는 것이 좋다. 운영체제와 C 라이브러리에서는 밑 줄로 시작하는 이름을 미리 예약(reserved)해 놨다. 이러한 형식을 사용한다고 해서 에러를 일으키지는 않겠지만, 이름 충돌이 일어날 수도있다.

④ C는 이름의 대소문자를 구별한다. NUMnum은 엄연히 다른 이름이다. Num 또한 마찬가지이다.

C99와 C11은 C의 국제화를 위해서 UCN(Universal Character Names) 매커니즘에 의해서 알파벳외의 문자들을 사용할 수 있게 허용했다.

변수의 초기화

int main(void)
{
    int perimeter = 3.141592;
    int diameter = 10, radius = 5;
    int diameter1, radius1 = 15;    // 유효하지만 바람직하지 않다.
    
    return 0;    
}

변수를 초기화(initialize)한다는 것은 변수에 초기값을 대입하는 것이다. C에서는 정의, 선언 및 정의 하는 식으로 변수를 초기화 할 수 있다.

위 코드의 마지막 라인은 diameter1radius1 가 모두 초기화 된다고 생각할 수 있지만, radius1는 초기화되지 않는다. 그러므로 초기화 시킬 변수와 초기화 하지 않을 변수를 같은 선언문에 두는 것은 피해야한다.







© 2020. by RIVER

Powered by RIVER