변수의 필요성

  • 변수의 필요성은 크게 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



주석

  • 사전적 의미 : 낱말이나 문장의 뜻을 쉽게 풀이
    간단히 말해 코멘트 혹은 설명
  • 흔히 말하는 좋은 프로그램의 조건인 유연성/가독성/일관성 등을 예를 드는데
    보기 쉽다는 말은 "가독성" 부분에 해당하는 중욯한 조건
  • 내가 짠 소스에 달아 놓은 설명이 아니라 내가 앞으로 짤 소스에 다는 이정표
    즉, 프로그램을 짜기전에 설계를 해두고 설계대로 할 수 있도록 해주는 이정표
  • 주석에 작성된 코드는 컴파일 시 컴파일러가 무시하고 빌딩을 진행
  • 주의사항 : 남발 시에 가독성이 떨어지는 요소가 될 수 있다


종류

  • 한줄 주석 : //
    말 그대로 한줄만 주석으로 처리하는 것
    // 이런식으로 사용
    // 두줄 처리시 두개를 사용
  • // 두줄만 쓰고 필요한 내용을 적는 것 
    => 일반적으로 초록색으로 처리
    ///        // 이 것이 2개 이상이면 상관 없다.
    //////////// 
    /////////////////////////////////////////
    //< 
    //<(*#@&^$(*&#
    // 무조건 시작만 //으로 한다면 한줄 주석 예시


  • 다줄 주석 : /* */
    /* : 다줄 주석의 시작
    */ : 다줄 주석의 끝
    /* 
        다줄 주석
        한번에 여러개 처리가능
        // 중간에 한줄주석 가능
    */
  • 다줄 주석 안에서 다줄 주석 사용시 에러
    /* 내용/내용
     /* 다줄주석 또 사용시 마지막 */ 
    인식하지 못해 에러 발생
    */


주석의 활용

  • 주석의 활용 방법 4가지
    함수를 제작 시
    변수를 선언 시
    제작자의 의도를 알려줄 때
    프로그램의 사용법을 알려줄 때
  • 프로그램을 만들 때 보통은 어떤 식으로 진행할지 순서를 정하고 처리하는 것
    그래서 설계를 하는 이유이기도 합니다. 하지만, 프로그램을 작성하면서 지속적으로 노트를 보고 만들진 않습니다.
  • 위와 같은 경우에 주석을 활용하게 됩니다. 
    • 예제
      /* 이 프로그램은 정수 한개를 입력 받아 그 정수만큼 이름을 출력하는 프로그램 */
      #include <stdio.h>

      void main(void)
      {
          //< 입력 받을 정수 변수 선언
          //< 반복초기 변수 선언
          //< 정수입력 안내문
          //< 정수입력
          //< 반복문을 입력받은 정수 까지 반복
          //< 이름을 출력 

      위와 같이 1차 구성 후 아래의 프로그램을 작성하게 됩니다.
      #include <stdio.h>

      void main(void)
      {
          //< 입력 받을 정수 변수 선언
          int input;
          //< 반복초기 변수 선언
          int i;
          //< 정수입력 안내문
          printf("정수입력:");
          //< 정수입력
          scanf("%d",&input);
          //< 반복문을 입력받은 정수 까지 반복
          for(i=0; i<input; i++)
          {
              //< 이름을 출력 
              printf("홍길동!@#@\n");
          }
      }

결론 

가독성과 일관성이 좋은 코드를 위해 주석을 사용합니다.
미리 이런 습관을 가지는 것이 좋습니다.

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


'언어 > 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