Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

변수와 자료형 본문

프로그래밍 언어/C언어

변수와 자료형

세레프 2023. 2. 1. 05:21

 어떤 프로그래밍 언어를 사용하더라도, 프로그래밍을 하게 되면,  변수와 자료형을 보게 될 것이다. 그렇다면 우리는 변수와 자료형이라는 것이 무엇이고, 왜 사용되는것이고, 자료형과 변수의 관계가 어떻게 되는지 알아야 한다.

 변수의 이해

 수학에서는 변수를 변하는 값, 정해지지 않는 임의의 기호로써 사용한다. 예를들면 x+y=5라고 할 때, x값과 y값의 합이 5가 되기만 하면 되기에, x=2,y=3이 될 수도 있고 x=1,y=4가 될 수도 있다. 하지만 프로그래밍에서의 변수는 조금 다른 개념으로 사용된다.

 

프로그래밍에서의 변수값을 저장하는 공간이다. 값을 변수에 저장할 때는 "변수명 = 값"을 이용하여 저장하는데, 프로그래밍에서 "="은 "값을 변수명에 저장한다."라는 의미를 가지고 있다. 예시를 하나 들어보자.

#include <stdio.h>

void main(){
	int a;
   	a = 10; 
	printf("a=%d,\n", a);
    }

 위의 코드을 해석해 보면, a라는 변수를 만들고(int a), 변수 a에 10이라는 값을 저장한 뒤(a = 10), 변수 a에 값을 출력하라는 의미(printf("a=%d,\n", a))를 가지고 있다.

위의 코드를 출력한 결과

 이처럼 메모리에 변수라는 공간을 만들어 데이터을 저장할 수 있다는 것을 알 수 있다. 그럼 왜 변수라는 것을 사용해야 하는가?

  변수를 사용해야 하는 이유는 다음과 같다.

  • 간편한 수정
  • 값에 의무부여 
  • 다음명령에서의 기억

 우선 변수를 사용하게 되면 수정을 쉽게 할 수 있다. 코드를 작성 중, 예상치 못한 이유로 코드를 수정해야 하는 경우가 많

다. 특히 값을 바꿔야 하는 경우가 많은데, 변수를 사용하지 않는다면, 길게 작성된 코드에서 수정해야 하는 부분을 일일히 찾아가면서 수정해야 한다. 하지만 변수를 사용하면, 수정하는 부분의 변수의 값만 바꿔주면 된다.

 

 그리고 값에 의미를 부여하기 위해서 변수를 사용하는 경우도 있다. 예를 들면, 캐릭터의 이름이 "A"이고 스킬 이름을 "B"라고 해보자. 코드에 "A"와 "B"를 그대로 사용하면, 코드를 본 다른 개발자들이 어느 것이 캐릭터의 이름이고 어느 것이 스킬의 이름인지 알 수 없다. 하지만 변수를 통해 이를 구별해 주면, 다른 개발자들도 "A"가 캐릭터이름과 "B"가 스킬이름이라는 것을  알 수 있게 된다. 이처럼 값을 구별해야 하는 경우에 변수를 사용하여 값에 의미를 부여하여 구별하게 된다.

 

 마지막으로 수많은 명령에 해당 데이터를 사용하기 위해서 사용한다. 아래의 두 코드를 한번 비교해 보자.

#include<stdio.h>

void main(){
    printf("a=10,b=20\n");
    printf("a+b=30");

}
#include<stdio.h>

void main(){
    int a,b,c;
    a = 10 ;
    b = 20 ;
    c = a+b;
    printf("a=%d,b=%d\n",a,b);
    printf("a+b=%d",c);

}

 두 코드의 결과는 똑같이 나온다. 하지만 위의 코드는 직접 계산을 하여 출력코드만 작성했다면, 아래의 코드는 변수에 데이터를 저장시킨 코드이다. 만약, "a*3.14-b/3.14"를 추가 계산을 해야 한다고 하면, 위의 코드는 직접 계산하여 출력해야 하지만, 아래 코드는 변수를 만들어 계산결과를 변수에 저장하여 출력하면 된다. 이처럼 코드를 추가하게 되더라도, 변수를 사용하게되면 쉽고 빠르게 코딩할 수 있게 된다. 

 

변수 선언 형식

 개발자가 변수를 사용하기 위해선, 사용할 변수를 선언을 해야하는데, 그럼 변수는 어떻게 선언하는 것일까?

자료형 변수명;

 위의 구조는 기본적으로 변수를 선언하는 방법으로, 자료형을 통해 해당 변수가 어떤 데이터를 저장할 것인지 IDE에게 선언하는 것이다.

 변수를 하나하나씩 선언해서 값을 지정할 수 있지만, 그렇게 한다면 코드의 길이가 길어지게 된다. 따라서 여러가지 변수를 만들고 값을 지정할 수 있는 방법이 필요하며, 다음과 같은 방법으로 선언할 수 있다. 

  • 하나의 자료형으로 여러개 변수 선언할 때 (자료형 변수명1, 변수명2, ....); ex) int a, b, c ;
  • 하나의 변수를 선언하면서 초기값을 지정할 때 (자료형 변수명= 초기값); ex) int a = 10 ;
  • 하나의 자료형으로 여러개의 변수를 선언한 후 초기값을 지정할 때 (자료형 변수명1=초기값1,변수명2=초기값2....);                               ex) int a = 10, b = 20, c = a+b ;

 두번째 방법을 보면, 변수를 선언하면서 데이터값을 저장하는 것을 알 수 있다. 이를 변수의 초기화라고 하는데, 초기화저장공간을 선언하면서 초기값을 저장하는 것을 말한다.

 

 변수명 표기법

 변수명은 자유롭게 지을 수 있지만, 변수를 효율적으로 사용하려면, 변수의 이름을 값과 상황에 맞게 사용해야 한다. 변수명을 작성할 때에 지켜야 하는 주의사항이 있다.

  • 영문자, 숫자, 특수문자(_)로만 구성 ex)home_address
  • 숫자로 시작할 수 없다 ex)1home(X)
  • 영문자는 대문자와 소문자 구분 ex)home_address와 Home_address는 다른 변수명
  • 변수의 이름은 키워드(key word) 사용불가 ex) 함수이름(int,main)

 위의 규칙을 지키면서 변수명을 자유롭게 지을 수 있다. 하지만 코딩이라는 것은 개발자 한명이 전부 하는 것이 아닌, 개발자 여러명이 하나의 프로그램을 만드는 것이다. 따라서 여러 개발자가 쉽게 이해 할 수 있게, 변수명 표기법을 통일할 필요가 있다. 

  • 헝가리어 표기법:자료형의 약자를 접두어로 붙임 ex)iAge,sName
  • 파스갈 표기법: 의미있는 단어를 밑줄로 구분 ex)home_address
  • 낙타표기법 : 시작은 소문자로 단어의 첫자를 대문자로 하여 구분 ex)homeAddress

 

자료형의 이해

 앞에서 변수를 선언할 때, "int a"라는 코드를 사용했다. 이때 "int"가 무엇일까? 이 "int"는 자료형이다. 자료형이란 저장공간이 저장할 수 있는 데이터의 형태를 선언하는 함수이다. 데이터에는 여러가지 형태를 가지고 있어서 변수에 어떤 데이터가 오냐에 따라서 메모리의 사용 크기가 달라지게 되고, 자료형의 형태도 달라진다. 

자료형 출력 변환 문자 크기 데이터 저장 범위
char %c or %d 1 문자 -128 ~ +127
short %d 2 정수 -32768 ~ +32767
unsigned short %u 2 정수 0 ~ 65,535
int %d 4 정수 -2147483648 ~ +2147483647
unsigned int %u 4 정수 0 ~ 4,294,967,295
long %ld 4 정수 -2147483648 ~ +2147483647
unsigned long %lu 8 정수 0 ~ 4,294,967,295
float %f 4 실수 -3.4*10^38 ~ 3.4*10^38
double %lf 8 실수 -1.7~10^308 ~ 1.7*10^308

 위의 표는 Visual studio 2019기준으로 자료형에 따라 출력되는 데이터의 형태, 변수의 크기를 나타낸 표이다. 위의 표를 보면 같은 데이터인 변수를 생성하더라도 자료형에 따라 크기가 다른 것을 확인 할 수 있다. 이는 메모리의 낭비를 최소한으로 하기 위함이다.

 

 먼저 정수 자료형과 실수 자료형의 출력결과가 어떻게 나오는지 확인해 보자.

#include<stdio.h>

void main() {
	
	int i = 0;
	short s = 1;
	long l = 2;
	float f = 3.14f;   //웬만하면, float형은 데이터를 저장할 때 데이터가 float형이라는 것을 알려줘야 한다. 
	double d = 4.13;

	
	printf("int i = %d\n", i);
	printf("short s = % d\n", s);
	printf("long l=%d\n", l);
	printf("float f = % f\n", f);
	printf("double d = % f\n", d);
}

 

위의 코드를 작성하여 출력하면 다음과 같다.

 출력결과로 보면, 정수 자료형인 int, short, long은 결과가 정수로, 실수 자료형인 float, double은  결과가 실수로 나타난 것을 확인할 수 있다.

 

 그 다음 문자 자료형의 출력결과가 어떻게 나오는지 알아보자.

#include <stdio.h>

void main() {

	char a = 'a';
	char b = 65;
	char name[4] = "Lee";

	
	printf("char a=%c\n", a);
	printf("char b =(ASCII CODE)%c\n", b);
	printf("name=%s\n", name);
}

 위의 코드를 자세히 보면 문자 변수(char a)에 저장할 때는 홀따옴표(' ')를 사용하는 것을 확인 할 수 있으며, 문자열 변수(char name[4])에 저장할 때는 문자열의 크기를 정해서 저장([ ])하며, 쌍따옴표(" ")를 사용하는 것을 확인 할 수 있다. 만약, 문자데이터인데 쌍따옴표를 사용하게 되면, 오류가 발생한다. 즉 문자데이터와 문자열데이터는 서로 구분되어야 한다.

 이때 문자열이란 char변수 하나를 여러개로 연결해서 만든 것으로, 문자열 변수에 저장할 때에는 크기가 항상 "초기값+1"이여야 하며, 초기값과 같을거나 적을 수 없다. 만약 char name[] = "초기값" 으로 코딩을 했을 경우, 문자열의 크기는 초기값을 저장할 수 있을 정도의 크기로 변수를 생성한다.

 출력결과를 확인해 보면, 문자 변수b의 저장되어 있는 값이 65가 아닌 "A"라는 것을 알 수 있다. 이는 문자 변수에 정수값을 넣으면 문자로 저장된다는 것을 알 수 있다. 이 정수값을 아스키코드값이라고 하는데, 아스키코드는 문자를 기억할 수 없는 컴퓨터가 문자를 기억하기 위해서 각 문자에 숫자를 부여한 코드이다. 이 아스키코드는 대문자와 소문자에 따라 값이 다르다.(A=65, a=97)

 

자료형 재정의 

 앞에서 나온 기존의 자료형의 이름을 우리는 다른 이름으로 바꿀 수 있다. 

#include <stdio.h>

typedef unsigned int uint;

void main() {
	uint number1 = 100;
	int number2 = 200;

	printf("number1 = %d,number2 = %d\n", number1, number2);
}

 위의 코드를 보면 "typedef"라는 함수를 볼 수 있다. 이 함수는 기존의 자료형의 이름을 다른 이름으로 바꾸게 해주는 함수로, "typedef 기존 자료형이름 새로운 자료형이름"의 형태를 가지고 있다. 위에서는 정수 자료형인 "unsigned int"를 짧게 줄여서 "uint"로 재정의 한것이다.

위의 코드에 대한 출력결과

 

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

출력함수 printf  (0) 2023.02.03
상수와 키워드  (0) 2023.02.02
C언어 프로그래밍의 기본  (1) 2023.01.31
Visual studio 2019 설치  (0) 2023.01.30
프로그래밍과 C언어  (0) 2023.01.29
Comments