본문 바로가기
프로그래밍 언어/C 언어

C언어 3장 <변수와 자료형1>

by Suff07 2024. 10. 13.

 

 

목차

    1. 변수<variable>란 무엇인가?

    앞장에서 보았듯이, 프로그래밍이란 함수가 중요하다라는 사실을 우리는 깨달았습니다.

     

    그러면, 이제부터 변수와 자료형에 대해서 한번 알아보는 시간을 가져보도록 하겠습니다.

    1-1. 변수 VS 값

    한문장으로 요약하면 다음과 같습니다.

     

     

    변수는 고정되어 있지 않은 임의의 값이고, 값은 이미 어떠한 형태로 정해진 데이터

     

     

     

    위에서 보시다시피, 1 + 2 = 3이라는 결과는 항상 바뀌지 않습니다.

     

    왜냐하면, 값이 고정되어있기 때문입니다.

     

    반면, 변수는 어떤 값을 넣느냐에 따라 결과가 달라집니다.

    1-2. 프로그래밍 언어에서의 변수의 편의성

    그럼, 이제부터 변수를 왜 쓰는지 알아보도록 하겠습니다.

     

    우리들은 초,중학생시절에 이미 변수라는 개념을 배웠습니다. 그렇기에 자동적으로 머릿속에서 변수라는걸 인식하고 있죠.

     

    반면, 컴퓨터는 0,1 즉 2진법에 대한것밖에 모르는 바보입니다!

    ※ 여기서 컴퓨터가 왜 2진법을 쓰는지에 대해 의문이 든다면 아래 링크를 참조해주세요!

    https://suff07.tistory.com/15

     

    그러니까, 우리가 머릿속에서 그리는 변수라는 개념이 따로 없다라는 점이죠.

     

    컴퓨터는 HDD에서 메모리로 데이터를 적재하게 되는데[각주:1], 변수를 선언할때 메모리의 특정 주소로 적재를 합니다. [각주:2]

     

     

     

    즉, 변수를 선언함으로써, 우리가 메모리에 접근하는것과 비슷한 양상을 띄게 되죠.

     

    이것이 바로 변수를 사용하는 이유입니다.

    1-3. 변수를 선언하는 여러가지 방법

    변수를 선언하는 경우는 여러가지가 있지만 몇가지 주의사항이 있습니다.

     

    I. 같은 함수내에서 같은 변수명은 쓸 수 없다.

    #include <stdio.h>
    int main()
    {
    	int xxx;
        int yyy;
        int zzz;
        int xxx;
    
    	return 0;
    }

     

    이런식으로 xxx가 두번 쓰일 수 없다라는점입니다.

    그렇지만, 아래처럼 선언을 하면 사용이 가능합니다.

    II. 대문자와 소문자는 변수명이 다르게 인식된다.

    #include <stdio.h>
    int main()
    {
    	int xxx;
        int yyy;
        int zzz;
        int XXX;
    
    	return 0;
    }

     

    이 경우는, xxx와 XXX가 변수명이 다르게 인식이 됩니다.

    III. 빈칸은 선언이 불가능하다.

    #include <stdio.h>
    int main()
    {
    	int xxx yyyy;
    
    	return 0;
    }

     

    이 경우에도 변수가 선언이 불가능합니다.

     

    그러면 어떻게 해결해야 할까요?

     

    xxx_yyyy처럼 _<언더바>를 선언하는것이 일반적인 관례입니다.

    IV. 연산자와 특정 단어는 변수명으로 선언이 불가능하다.

    #include <stdio.h>
    int main()
    {
    	int xxx+yyyy;
    
    	return 0;
    }

     

    이런식으로 변수명에 +나 -연산자를 선언하는것은 불가능합니다.

     

    왜냐하면, 이미 연산자는 "더해라"라는 의미로서 이미 정의가 되어있기 때문입니다.

     

    #include <stdio.h>
    int main()
    {
    	int for;
        int if;
    
    	return 0;
    }

     

    다음과 같은 경우는 어떨까요?

     

    당연히, 안됩니다. 왜냐하면 for나 if 또한 이미 어떠한 기능을 정의하였기 때문에 선언이 불가능합니다.

     

    이렇게 이미 어떠한 기능을 정의한 특정단어들을 우리는 예약어와 키워드라고 합니다.

     

    자세한 목록들은 아래 링크에 정의되어있습니다.

    https://www.devkuma.com/docs/c/%EC%98%88%EC%95%BD%EC%96%B4-keyword/

    V.  변수를 한번에 선언해도 괜찮다.

    #include <stdio.h>
    int main()
    {
    	int xxx,yyy,zzz;
        //int xxx;
        //int yyy;
        //int zzz;
        
    
    	return 0;
    }

     

    이런식으로, 자료형이 일치한다면 변수를 한번에 선언하는것도 가능합니다.

     

    1-3. 상수<Constant>란?

    변수이야기를 하게 되면 빼면 안되는 것이 바로 상수입니다.

     

    상수는 값을 고정시킨다라는 의미입니다.

     

     

    앞에 const가 붙은것이 바로 한정자인데요.

     

    이는  int형 데이터형태로 정의된 angel이라는 변수의 값을 1004로 고정하겠다라는 의미입니다.

     

    말이 약간 복잡한데 다시 한번 잘 봅시다.

     

    이름 기능
    angel angel이라는 변수명은 그 자체로는 의미가 없습니다.
    하지만, 어떠한 임의의 값의 이름이라는 점에서는 상수를 갖고 있습니다.
    즉, angel의 특정 값은 없어도 angel의 존재는 의미가 있는것이죠.
    1004 1004라는 데이터 그 자체만으로도 값이 1004라는 의미를 갖고 있습니다.
    말 그대로 숫자 1004죠
    const 즉, angel=1004를 정의하겠는데 이를 고정적으로 사용하겠다라는 의미입니다.

     

    2. 자료형<Data Type>

    2-1. 자료형이란?

    자료형이란 변수 또는 값이 가질수 있는 데이터의 종류를 의미합니다.

     

    동물로 따지면, 포유류인지 양서류인지 파충류인지 이러한 종류가 있어야 구분이 되듯이 말이죠.

     

    그리고, 자료형은 크게 정수형과 실수형으로 구분이 가능합니다.

     

    2-2. 자료형을 사용하는 이유?

     

    자료형 즉 데이터 타입 또한 위에서 설명하였듯이 컴퓨터는 0과1밖에 모릅니다.

     

    그러므로 해당 변수가 어떤 자료형인지를 인지를 시켜줘야 합니다.

     

    그러면 왜 자료형을 쓰는게 편리할까요?


     

    첫번째 이유는 같은 자료형끼리 컴퓨터는 연산을 하기 때문입니다.

     

     

    이런식으로 서류 정리를 하기위해서 집게를 구비하는데 이렇게 구분을 짓기 위해 고안된 개념이 바로 데이터 형태입니다.


     

    두번째 이유는 같은 정수형이더라도 사용하는 데이터 용량과 표현할 수 있는 데이터 범위가 다르기 때문입니다.

     

    위의 그림을 보시게 된다면 아시겠지만 정수형이더라도 종류가 많은것을 우리는 볼 수 있습니다.

     

    자, 한번 생각을 해봅시다. 만약 일반적인 컴퓨터 환경이 아닌 자원이 제한된 환경에서 사용을 한다 칩시다.

    그렇게 되면, 우리는 용량 하나하나가 소중하지 않겠습니까?

     

    정수형 하나를 쓴다 치고 숫자가 128 이상은 거의 안 쓰이는 조건의 프로그램을 짠다 치면, int형을 쓰는것이 경제적일까요? short형을 쓰는것이 경제적일까요?

     

    #include <stdio.h>
    
    int main()
    {
        short a;
        a = 120;
        int b;
        b = 120;
        printf("%ld,%ld",sizeof(a),sizeof(b));
        //sizeof함수는 변수의 용량을 나타냅니다.
    
        return 0;
    }
    
    //결과는 2,4

     

    같은 숫자인 120이라 해도 할당이 되는 용량이 무려 2배나 차이가 납니다.

     

    또한, 위의 표에서 보시다시피 숫자를 표현할 수 있는 범위가 차이가 납니다.

     

    2-3. 다양한 정수형 데이터 타입

     

    정수형 데이터 타입은 여러가지가 있지만 보편적으로 많이 쓰이는 타입은 char,int,long long int가 있습니다.

    걔중에서 char는 정수를 받아서 문자로 출력을 하게 되는데요.

    문자에 대한 이야기는 다음에 하도록 하겠습니다.

    3. 요약정리

    • 변수를 선언하는 편의성은 바로 우리가 메모리에 접근하는듯한 모양을 갖추기 위함이다.
    • 컴퓨터는 0과 1밖에 모르는 바보이므로, 자료형을 선언하여 같은 자료형끼리 묶어줄 필요가 있다.
    • 자료형에는 크게 정수형과 실수형으로 구분이 된다.

     

     

    1. 보통은 코드영역이죠. [본문으로]
    2. 이때의 특정 주소값을 변수로 하는 자료형을 포인터라고 하는데 자세한건 포인터 시간때 조져보도록 합시다. [본문으로]

    '프로그래밍 언어 > C 언어' 카테고리의 다른 글

    C언어 2장 <Hello World~!>  (0) 2024.08.24
    C언어 1장<어셈블리어와 C언어>  (0) 2024.01.14
    프롤로그  (0) 2024.01.14