ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 변수 (Variable)
    C 2021. 12. 8. 04:13

     

    해당 글은 "열혈 C 프로그래밍" 책을 바탕으로 작성되었습니다.
    💡 값을 저장할 수 있는 메모리 공간에 붙은 이름

     

    변수 사용법

    int num;  // num 이라는 이름의 변수 선언
    /*
    	int => 정수 저장이 가능한 메모리 공간 할당
    	num => 메모리 공간의 이름
    */
    num = 20;  // 변수 num 에 20 저장
    printf("%d", num);  // 변수 num 의 값 참조
    
    • 변수를 하나 만들면 (선언하면), 그 변수의 이름을 통해 값의 저장 및 참조는 물론 저장된 값의 변경도 가능함.
    • 선언된 변수에 처음 값을 저장하는 것을 '초기화'라고 하며, 이후 저장된 값을 변경할 때는 '대입' 또는 '대입연산'을 진행한다고 함.
    int num = 12;  // 선언과 동시에 초기화 가능
    int num1, num2;  // 두 개 변수 한꺼번에 선언 가능
    
    • 변수 선언만 하고 초기화 하지 않으면 '아무런 의미가 없는 값 (쓰레기 값)'이 저장됨. 가급적 선언과 동시에 초기화를 권장함.

     

    변수 선언 시 주의사항

    💡 변수의 이름을 지을 때에는 역할에 어울리는 의미있는 이름을 지어야 한다.
    • 중괄호 내에 변수를 선언할 경우, 변수의 선언문은 중괄호의 앞부분에 위치해야 함.
    • 변수 이름 규칙
      • 변수의 이름은 알파벳, 숫자, 언더바( _ ) 로 구성됨.
      • C 언어는 대소문자를 구분함.
      • 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용할 수 없음.
      • 이름 사이에 공백이 삽입될 수 없음.

     

    변수의 자료형

    • 정수형 변수 : 정수 저장을 목적으로 선언된 변수 (char, short, int, long)
    • 실수형 변수 : 소수점 이하의 값을 지니는 실수 저장을 목적으로 선언된 변수 (float, double)
      ⇒ 이렇게 나뉘는 이유는 정수냐, 실수냐에 따라서 값이 메모리 공간에 저장 및 참조되는 방식이 다르기 때문!

     

    변수의 존재 기간과 접근 범위

    • 변수는 선언되는 위치에 따라서 크게 '전역변수'와 '지역변수'로 나뉨.
      • 메모리 상에 존재하는 기간
      • 변수에 접근할 수 있는 범위

    함수 내에만 존재 및 접근 가능한 "지역변수 (Local Variable)"

    • '지역변수'에서 말하는 '지역'이란 중괄호에 의해 형성되는 영역을 뜻하며, 중괄호 내에 선언되는 변수는 모두 지역변수임.
    • 지역변수는 선언된 지역 내에서만 유효하다는 특성을 지니고 있으며, 해당 지역을 벗어나면 자동으로 소멸됨. 이렇듯 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않음.
    • 실행 흐름에 따라 이해하기 : 지역변수는 해당 선언문이 실행될 때 메모리 공간에 할당되었다가, 선언문이 존재하는 함수가 반환을 하면 (종료하면) 메모리 공간에서 소멸됨.
    • 선언된 영역을 벗어나면서 자동으로 소멸되기 때문에 지역변수를 '자동변수'라고 부르기도 함.

    다양한 형태의 지역변수

    • 지역변수는 반복문이나 조건문에서도 선언이 가능함.
      ⇒ 지역변수는 외부에 선언된 동일한 이름의 변수를 가리게되므로, 외부에서 num 이 선언되어 있어도 이는 가리워져 내부의 num 으로 활성화 됨.
      for (cnt = 0; cnt < 3; cnt++) {
      	int num = 0;  // for 문 내에 선언되었어도, 중괄호 내에 선언되었으므로 for 문 내에서만 유효한 지역변수가 됨
      	num++;
      }​
    • 지역변수의 일종인 "매개변수"
      • 선언된 함수 내에서만 접근이 가능함.
      • 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸이 됨.

    어디서든지 접근 가능한 "전역변수 (Global Variable)"

    • 프로그램이 처음 실행되면 메모리 공간에 할당되어서 프로그램이 종료될 때까지 메모리 공간에 남아있는 변수임.
    • 별도의 값으로 초기화 하지 않으면 0으로 초기화 되며, 프로그램 전체 영역 어디서든 접근이 가능함.
    • 전역변수는 프로그램의 구조를 복잡하게 만드는 주범이기 때문에 가급적 선언을 제한해야 함. ⇒ 얽히고 설킨 스파게티 코드가 될 수 있음!
    • 가급적 변수의 이름은 달리하는 것을 권장함.

    지역변수에 static 선언을 추가해서 만드는 "static 변수"

    • 전역변수와 지역변수 모두에 static 선언을 추가할 수 있음.
    • 지역변수에 static 선언이 붙게 되면, 이는 전역변수의 성격을 지니는 변수가 됨.
      • 선언된 함수 내에서만 접근이 가능함. (지역변수 특성)
      • 딱 1회 초기화 되고 프로그램 종료시까지 메모리 공간에 존재함. (전역변수 특성)
      • static 으로 선언된 지역변수는 전역변수와 동일한 시기에 할당되고 소멸됨.
    • 전역변수의 단점을 static 지역변수가 어느 정도 해결해주기 때문에, 변수의 접근 영역이 하나의 함수로 제한된다면 static 지역변수의 선언을 고려해야 함. (안정적 ↑)

    보다 빠르게 도와주는 "register 변수"

    • 레지스터는 CPU 내에 존재하는 크기가 매우 작은 메모리로, CPU 내에 존재하기 때문에 이 메모리에 저장된 데이터를 대상으로 하는 연산은 매우 빠름.
    • register 변수로 선언하면 컴파일러는 이 선언을 힌트로 하여 레지스터의 활용 여부를 결정함. 아무리 register 선언을 추가해도 컴파일러가 합당하지 않다고 판단하면 레지스터에 할당되지 않으며, 반대로 아무런 선언을 하지 않아도 컴파일러가 레지스터에 할당해야겠다고 판단하면 그 변수는 레지스터에 할당됨.
    • 이는 너무나도 중요하고 비싼 메모리 공간으로, 전역변수를 레지스터에 할당하는 건 있을 수 없는 일!

    'C' 카테고리의 다른 글

    [C] 상수 (Const)  (0) 2021.12.08
    [C] 연산자 (Operator)  (0) 2021.12.08
    [C] 자료형 (Data Type)  (0) 2021.12.08
    [C] 함수 (Function)  (0) 2021.12.08
    [C] 아스키코드 (ASCII)  (0) 2021.12.08

    댓글

leejiwonn