자료형 (데이터 타입)
데이터 타입이란 정수, 실수, 불린(boolean)형 등의 여러 종류의 데이터를 식별하는 분류로서
더 나아가 해당 자료형에 대한 기능과 값, 해당 자료형에서 수행할 수 있는 명령(연산)들, 데이터의 의미, 해당 자료형의 값을 저장하는 방식을 결정합니다.
따라서 우리는 자료형으로부터 값의 범위(예를 들어 정수형은 -32768 ~ 32767 등), 연산의 종류(+, -, *, ...)등을 알아낼 수 있습니다.
데이터 타입을 사용함으로써, 실세계의 대상들을 수월하게 표현할 수 있고, 또한 컴퓨터가 메모리공간을 효율적으로 사용할 수 있으며, 타입 불일치 등의 오류를 사전에 알고 예방할 수 있습니다.
데이터 타입의 종류
데이터 타입의 종류에는 기본 데이터 타입과, 유도된 데이터 타입이 있습니다.
기본 데이터 타입
다른 데이터 타입을 사용하지 않고도 스스로 정의되는 데이터 타입을 기본 데이터 타입이라고 합니다.
예를 들어 정수(Integer), 실수(floating point), 참거짓(boolean), 문자(character)등이 있습니다.
대부분의 기본 데이터 타입은 컴퓨터 하드웨어에서 지원됩니다.
정수(int ,Integer)
양수는 2진수 그대로 사용하며, 음수는 2의 보수 표기법으로 표현합니다.
C언어에는 여러 가지 정수 타입이 존재하는데, 다음과 같습니다.
int(4byte), long(8 byte), signed int , unsinged int, ...
실수(Floating point types)
컴퓨터에서는 실수를 정확하게 표현할 수 없고, 오직 근사치로만 표현합니다.
이때 실수를 표현하는 방법으로 부동 소수점(floating point) 방법을 사용합니다.
https://ubiquitous4g.tistory.com/47
위 블로그에 자세히 나와있으니 궁금하신 분들은 한번 들어가서 읽어보셔도 좋을 거 같습니다 :)
C언어의 실수형은 다음 3가지 종류가 있습니다.
자료형 | 크기 | 유효 숫자 | 출력 변환 문자 |
float | 4 | 7 | %f |
double | 8 | 15 | %lf |
long double | 8 이상 | 15 이상 | %Lf |
불린(Boolean)
참, 거짓 단 두가지의 데이터만을 가집니다.
조건문 등에 사용되며, 데이터가 참, 거짓 둘 뿐이기 때문에 주로 1byte로 표현합니다.
Java에서는 별로의 타입(boolean)으로 가지기도 하지만, C언어에서는 정수 타입을 빌려서 사용합니다.
따라서 C언어에서는 4바이트로 표현됩니다.
이때 0이면 거짓(false), 0이 아니면(대표적으로 1) 참(true)입니다.
문자 타입(Character)
문자를 표현할 때는, 아스키 코드 혹은 유니코드를 사용합니다.
C언어에서는 기본적으로 아스키 코드를 사용하며, 따라서 char에는 '가'등의 한글을 담을 수 없습니다.
만약 담으려고 한다면 다음과 같은 오류 메세지가 발생합니다.
character too large for enclosing character literal type
C언어에서 한글은 2바이트 혹은 3바이트를 사용하여 표현합니다.
유도된 데이터 타입
기본 데이터 타입이 아닌 나머지 데이터 타입들을 의미합니다.
배열, 클래스, 포인터, 구조체 등이 이곳에 포함됩니다.
변수(Variable)
프로그래밍 언어 혹은 컴퓨터 과학에서 변수(variable)는 von Neumann(폰노이만)구조의 기억장소를 추상화한 것입니다.
변수에는 다음과 같은 6가지 속성들이 있습니다.
이름(name) : 변수의 이름입니다. 예를 들어 int age; 라는 변수가 있을 때, 해당 변수의 이름은 age입니다.
타입(Type): 변수가 저장하는 자료형을 나타냅니다. 위의 예시에서 age라는 변수는 int 타입이며, int타입의 자료형을 저장할 수 있습니다.
주소(Address) : 변수가 메모리 상에 저장된 주소를 나타냅니다.
값(value) : 변수 속에 들어있는 값을 나타냅니다.
영역(scope) : 변수가 식별 가능하고 사용 가능한 범위를 나타냅니다.
존속기간(lifetime) : 변수가 메모리 상에 존재하는 기간을 나타냅니다. 대부분의 변수는 프로그램 내내 존재하지 않으며, 각자의 역할이 끝나면 메모리 상에서 제거됩니다.
그리고 이러한 속성들을 변수에 부여하는 것을 바인딩(binding)이라고 합니다.
변수의 이름
예약어와 식별자
예약어는 컴파일러와 약속된 단어, 즉 이미 정해져 있는 단어이며, 식별자는 사용자(개발자)가 만든 단어입니다.
즉 변수를 정의할 때 변수의 이름은 식별자가 되며, 식별자를 만드는 규칙은 아래와 같습니다.
알파벳 A~Z, a~z, 숫자 0~9, _(밑줄)만 사용할 수 있습니다.
단어의 시작은 숫자로 시작할 수 없습니다.
대문자와 소문자는 서로 구별됩니다.
변수의 타입
변수의 타입으로는 기본 타입과 유도된 데이터 타입이 존재합니다.
유도된 데이터 타입의 예시는 다음과 같습니다.
배열
char alphabat[3] = {'a', 'b', 'c'};
문자열
char word[4] = "abc";
변수의 주소
프로그램에서 변수는 데이터 타입(Type, 자료형) 크기만큼의 기억장소, 즉 메모리 공간이 할당됩니다.
이때 해당 변수에 대응되는 기억장소의 주소를 l-value라고 부릅니다.
한 변수의 주소는 실행 시점에 따라 다를 수 있습니다.
(예를 들어 함수 속에만 존재하는 어떠한 변수에 대하여, 해당 함수가 여러번 호출되었을 때, 호출될 때마다 다른 주소가 부여됩니다.)
또한 이름이 동일한 여러 변수가 있을 때, 프로그램에서 사용된 위치(전역변수, 지역변수)에 따라 주소가 다를 수 있습니다.
Alias 현상
하나의 기억장소(메모리 주소)에 여러개의 변수 이름이 대응되는 현상을 의미합니다. 이후 포인터를 다룰 때 자세히 배울 내용이므로 넘어가도록 하겠습니다.
변수의 값
변수에 저장되어 있는 값을 의미합니다.
위에서 살펴보았듯이 변수의 l-value는 변수의 주소입니다.
변수의 값은 r-value라고 부릅니다.
C언어에서는 초기화하지 않은 변수의 r-value에는 쓰레기 값이 들어있습니다.
Const
변수를 상수(변하지 않는 값)로 지정하기 위해서 사용합니다.
'c언어' 카테고리의 다른 글
[C언어] - 지역변수, 전역변수, static 변수 (0) | 2022.04.19 |
---|---|
[C언어] - 함수 (0) | 2022.04.19 |
[C언어] - 조건문, 반복문 (0) | 2022.04.19 |
[C언어] - 연산자, 형변환 (0) | 2022.04.19 |
[C언어] - 입출력과 제어문자 (0) | 2022.04.18 |