본문 바로가기

카테고리 없음

자료형과 자동 형 변환


1. 자료형

프로그래밍에 사용되는 객체들은 자료형(type, 타입)을 가지고 있다.
자료형이란 그 개체의 성격을 말하는 것이다. 어떤 특징을 가지고 있는지에 대한 암묵적인 설명이다.

방금 말한 '객체'라는 것에는 여러가지 타입이 있지만,
객체가 가질 수 있는 가질 수 있는 값을 변경할 수 있느냐 없느냐에 따라서 크게
변수와 상수로 나뉜다.

이 중에서 자료형을 이야기할 때 논의하고 싶은 녀석은 바로 '변수'이다. 
변수는 말 그대로

= 그 값이 변할 수 있는 수 이다. (어떤 값을 가져야 연산을 할 수 있고 의미있는 결과를 낼 수 있을 것은 당연하다)

그런데, 프로그래밍은 수학과 달라서
단순히 연산만 하면 되는 수학과 달리
프로그래밍의 과정은 프로그래밍의 배경환경에 해당하는 컴퓨터에 저장이 되어야 한다.
그래야 컴퓨터가 연산을 하지 않겠는가?
그리고 컴퓨터 내부에서 저장을 담당하는 곳은 메모리이므로,

변수라는 것은 데이터를 저장할 메모리 공간을 할당하고, 이에 이름을 붙여준 것 이다.
[출처] 열혈강의 C 프로그래밍

자료형이러한 변수의 특징을 나타내는 이름이다.
예를 들어, 정수를 나타낼 수 있는 변수를 만들고 싶다면,
int 라는 타입(자료형)을 변수에 지정하여 선언해 준다.

int a;  // 이제 a는 -2147483648~+2147483647 까지의 정수를 나타낼 수 있는 특징을 가지는 변수이다.



그런데 아까 변수는 메모리에 저장되어야 한다고 했다. 공간을 할당받는 것이다.
그렇다면 내가 지정하고 싶은 변수는 얼마만큼의 공간을 할당받아야 할까?
이것 또한 자료형이 결정지어준다. 방금 선언한 int 는 4바이트를 할당받는 자료형이므로

int a를 선언한다는 것은

1) 정수값을 갖고(변수의 특징 - 데이터의 표현방식을 정한다)
2) 4바이트를 할당받는(공간의 배정 - 메모리 공간을 적절히 사용한다)

변수를 선언한다는 뜻이다. 



2. 자동 형 변환

먼저 핵심을 기억하자.
자동 형 변환'자료형'의 '변환'이 자동으로 되는 것. 

그렇다면 자동 형 변환의 핵심도 2가지이다.(자료형의 특징과 맥을 같이 하여)

1) 데이터의 표현방식
2) 메모리 공간의 사용



ex)

1:   int n = 10.3;
2:   double a = 100;
3:   char ch = 130;
/* 대입 연산자는 left type = right value가 기준이다.
대입연산자 기준 오른쪽의 값이 왼쪽 변수의 자료형에 맞춰 저장된다.*/



1) 데이터 표현방식에 의한 데이터 손실
1번째 줄에서 값 10.3은 좌측 정수형 변수 n에 저장된다.
기준은 왼쪽 자료형이고, int의 데이터 표현범위는 정수이다.
그러므로 10.3.은 10으로 저장된다. 자동으로 데이터의 손실이 일어난 경우이다.
(올림, 반올림, 버림의 의미가 아니라 그냥 소수점 이하 값을 무시한다)

2) 데이터 표현방식, but 데이터 보존
2번째 줄에서는 100이 double형 변수 a에 저장된다.
그런데 정수를 실수데이터로 저장하고자 할 때에는 문제가 없다.
크게 보면 정수도 실수에 포함되지 않는가? 3은 3.0으로 봐도 무관한다.
데이터 표현방식에 문제가 없으므로 데이터는 보존된다.

3) 메모리의 저장공간에 의한 데이터 손실
3번째 줄에서는 정수를 char형(문자형) 변수에 저장하려고 하고 있다.
/*컴퓨터는 모든 연산을 정수로 처리하므로 char형은 -128~127의 정수값을
ASCII 코드값에 의해 문자로 변환한 자료형에 불과하다*/

그런데 처리해야 할 값이 저장할 자료형의 범위를 넘어선다.
/* char형은 1바이트, int형(정수)은 4바이트의 저장공간을 할당받는다 */
그러므로 3바이트만큼의 자료가 손실된다. 결국 엉뚱한 값이 저장될 것이다.