변수의 필요성

  • 변수의 필요성은 크게 2가지
    데이터의 보존과 관리
    데이터를 보존하고 필요시에 참조하고 관리하기 위해 변수를 사용

  • 데이터 처리를 위해 주기억장치나 보조기억장치에 저장
    데이터를 저장하기 위해서 메모리 공간을 할당하고 그 공간에 데이터를 보존
    보존된 데이터를 가공(읽고/쓰기)하기 위해 공간을 할당하고 관리하기 위해 이름을 부여

  • 프로그램을 할 때 각각의 데이터들은 고유의 주소를 가지고 있다.
    모든 메모리는 16진수의 숫자로 표시 (0xff00efa3)
    표기된 공간에 데이터를 저장
    예시 : 집주소와 집에 사는 사람을 주소와 데이터에 비유

  • 모든 메모리를 0xff00efa3에 3이라는 값이 살고 있어 0xe0e0d0e0에는 10이라는 값이 살고 있다는 형태로 기억하며 프로그램을 만들기 어렵습니다. 주소를 전부 외우기 어렵기 때문입니다.

  • 그렇기 때문에 0xff00efa3 라는 메모리 주소를 A, 0xe0e0d0e0 이라는 메모리 주소를 B라는 이름을 부여하여 컴퓨터와 프로그래밍 언어가 상호간에 약속을 하고 A에 3, B에 10을 대입하면 컴퓨터가 A,B의 이름이 부여된 공간의 주소로 가서 그곳에 3과 10이라는 값을 넣게 됩니다.

  • 데이터를 보존하고 필요시에 참조하고 관리하기 위해 변수를 사용
    변수를 사용하는 목적은 데이터의 보존과 관리(읽기/쓰기)


변수 (Variable)

  • 변수의 사전적 의미 : 어떠한 관계나 범위 안에서 여러가지의 값으로 변할 수 있는 수
    변수의 프로그래밍적 의미 : 데이터를 저장할 수 있는 메모리 공간
    프로그램이 실행 중에 변하는 값을 처리(읽기/쓰기) 할 수 있는 데이터

  • 변수의 고려사항
    1. 생명주기 : 변수의 생성 소멸시기를 판단
                (생명주기에 따라 전역변수, 지역변수, 정적변수로 구분)

    2. 참조가능 범위 : 변수의 데이터를 언제 참조해야 할지의 결정
                     어디서 참조하고 어디서 참조 안해도 되는지 여부 
                     (생명주기와 밀접한 관계가 있으므로 생명주기에 따라 범위도 결정)

    3.자료형(데이터유형) : 어떠한 형태로 변수를 컴퓨터에 선언할지 여부
                         (정수, 실수, 문자 등 어떤것을 저장하느냐에 따라 판단)

    4.데이터의 크기 : 메모리를 얼마의 크기로 만들지 판단
     (메모리 공간)    단순히 숫자정수라도 데이터 범위에 따라 2byte, 4byte로 선언할 지 판단
                    ( 2바이트는 0~ 655535 음수를 사용할 경우 -32768 ~ 32767 )

    5.저장되는 값의 유형 : 숫자나 문자 같은 값을 저장할지 주소 값 자체를 저장할지 여부 판단

    6.초기화 여부 : 변수를 선언시 기본적으로 공간(주소)만 할당해주기 때문에 내부에는
                  쓰레기값(쓸 수 없는 값)이 남아 있기 때문에 청소를 해줄지 말지의 여부 판단

[그림 1]


[그림 2]
  • [그림 1] 에서 A라는 변수의 이름이 만들어 질 때 [그림 2]에서 빨간선으로 보이는 메모리에 경계영역을 설정 이후에 경계영역은 자료형의 타입에 따라 크기가 결정
    그 후에 경계영역은 사용자가 지정한 이름을 A라고 운영체제에서 지정 (우리는 사용만 하게 된다)

  • 할당된 공간에는 사용할 수 없는 값인 쓰레기 값이 존재
    이유는 메모리가 해제될 때 (변수 소멸 시) 경계영역만 없애기 때문에 이전에 사용한 데이터는 그대로 남아있고 어떠한 값이 얼마에 크기로 들어 있는지 할 수 없기 때문에 쓰레기 값이라 부르는 것

  • 변수 선언 형태

    #include <stdio.h>
    void main(void)
    {
        int    nNum;
    }


상수 (Constant)

  • 상수의 사전적 의미 : 변수의 상대적 의미로 어떠한 상황에도 변화지 않는 수
    상수의 프로그래밍적 의미 : 사용자가 한 번 정해지면 값을 변경할 수 없는 변수 또는 값
    프로그램 실행 중에는 변경할 수 없는 데이터!!!!!!!!!!

  • 리터럴(Literal) 상수
    변수의 이름이 없고 그 값 자체가 상수인 것
    메모리공간 어딘가에 살당은 되어지고 읽기는 가능하지만 변경은 불가
    -  정수형 상수
        1. 10진수 : -1, 2, 3, 0 등으로 표현되는 일반적인 수
        2. 8 진수 : 앞에 숫자 0을 붙여서 표현 8진수 10의 경우 010으로 표현
        3. 16진수 : 앞에 숫자 0과 알파벳 x(Hex의 x) or X 를 붙여 표현
                16진수 A7은 0xA7 혹은 0XA7으로 표현(주로 주소표현에 사용)
        4. 2 진수 : 일반적으로 8bit로 표현 < 0110 0001 과 같이 표현 >
    -  문자형 상수
        - 문자형 상수는 작은 다옴표 ' ' 로 표현.
        - 1개의 문자를 표한하기 위해 사용되며 '1', 'a', 'c', '8' 과 같이 1byte로 표현
          (문자집합에 따라 유니코드에서는 2바이트로 표현)
        - 문자도 상수도 내부저긍로는 숫자 ASCII(아스키 코드표)상에 정해져 있는 값
        문자들의 값이 정해져 있어 문자 '0' 은 내부적으로 48이라는 값, 문자 'A'의 경우 41의 값 
                                        [아스키코드표]

    - 실수형 상수
    IEEE 754표준에 따른 부동 소수점 방식
    실수형 상수는 소수점 가지는 상수 < 1.2, 3.0f, 4.323e, 3.33213e-2 >

    - 문자열 상수
    문자열 상수는 " " 큰따옴표로 표시되며, 문자들의 집합이라는 의미에서 문자열이라 칭한다
    "고길동", "이름", "a" 이런식으로 큰따옴표 사이에 여러개의 문자 사용
    문자형 상수 'a'와 문자열 상수 "a" 다르며 'a'은 문자 a, "a" 는 문자열 a라 부릅니다

  • 심볼릭(Symbolic) 상수
    지정된 특정 변수의 데이터를 변경하지 못하도록 상수화(Constant)하여 사용하거나 상수로 정의된 값을 이름으로 지정해서 상수를 상징적으로 사용하는 상수들

    1. 리터럴 상수와의 차이점
        - 리터럴 상수는 변수의 이름이 없고 값 자체가 상수화
        - 심볼릭 상수는 변수를 상수화시켜서 사용하던가 특정 이름을 지정


    2. 심볼릭 상수의 종류
        - const (변수의 상수화)
            선언하는 변수의 앞에 const 키워드를 붙여 상수화
            변수의 값을 바꿀 수 없기 때문에 반드시 선언과 동시에 초기화를 진행해서 시킵니다.
          변수는 선언되어지면서 쓰레기 값이 들어가 있기 때문에 쓰레기 상수는 문법상 에러처리

        - define (정의 상수화)
            전처리 명령 중 하나인 #define 명령으로 특정 이름을 지정해서 상수값으로 처리
            <예시 : #define MAX 10 / MAX란 이름을 모두 10으로 상수 처리>


결론

변수는 데이터를 보존하거나 관리의 주목적
상수는 정해진 값을 사용하기만 하고 변경은 하지 않는게 주목적
변경되지 않아야할 모든 데이터는 상수화 시켜서 사용하는 것이 바람직
수시로 변경되는 데이터는 변수로 선언하는 것이 바람직

출처 : http://blog.naver.com/jerokill/20198649799


'언어 > C' 카테고리의 다른 글

연산자  (0) 2016.03.14
제어문  (0) 2016.03.13
getch / getche / getchar / putchar / puts  (0) 2016.03.11
printf 서식문자  (0) 2016.03.10
주석  (0) 2016.03.08

+ Recent posts