자료형(Data Type)
영문 그대로 데이터 타입이라고도 읽는다.
자료형은 데이터 값의 형태를 미리 지정함으로써, 메모리에 공간을 확보하고 데이터 간 연산을 용이하게 한다.
예컨대, 상자라는 자료형과 건물과 책이라는 데이터가 있다고 가정하자.
이러한 경우, 상자에 건물을 넣을 수 없으나 책은 담을 수 있을 것이다.
즉, 자료형은 데이터를 담아 연산을 가능하게하고 담긴 데이터 형태도 가늠할 수 있게 한다.
종류
자료형의 종류는 프로그래밍 언어마다 다를 수 있으나,
일반적으로 크게 5가지 형태가 있다.
*시작에 앞서 참고로 1바이트(byte)는 8비트(bit)에 해당한다.
1) 불린(Boolean) / 키워드 : bool(c/c++), boolean(java)
부울 대수, 불 대수라고도 하며, 0과 1을 담을 수 있는 대체로 1byte 크기를 가진다.
여기서 0은 거짓(false), 1은 참(ture)에 대응된다.
C/C++ 코드 예)
bool value = 0; if(value){ printf("TRUE"); }else{ printf("FALSE"); }
위 코드에서 bool 자료형을 갖는 'value'이름의 변수에 '0'을 대입했다.
그리고 조건문(if)에서 조건식안에 value는 0을 가졌으므로 false가 된다.
이를 실행하면 FALSE를 확인할 수 있다.
2) 문자형(Character) / 키워드 char
캐릭터 형이라고도 하며, 문자 하나를 담을 수 있는 1byte(8bit) 크기를 갖는다.
때문에 표현 가능범위는 0부터 127까지 총 가짓수는 128개가 된다.
즉, 컴퓨터는 문자인지 숫자인지 모르기때문에 숫자로도 담을 수 있다.
JAVA 코드 예)
char ch = 65; System.out.println(ch);
결과)
그런데 위와 같이 65가 대문자 A로 자동 변환된 것을 볼 수 있다.
바로 아스키(ASCII) 코드 내에서 정수 '65'에 대응되는 값이 대문자 'A'이기 때문이다.
만약 숫자 그대로 출력하고 싶다면, 자바에선 Integer 클래스를 사용할 수 있다.
System.out.println(Integer.toString(ch));
여기서 toString은 숫자를 문자열로 변환해주는 역할을 하는 메소드다.
위 코드는 자바를 예로 들었는데, C/C++에서 살펴보면 다음과 같다.
C/C++ 코드 예)
char ch = 65; printf("정수 : %d, 문자 : %c", ch, ch);
변환문자(치환문자 또는 서식문자) %d는 decimal의 약자로, 10진수 형태로 변환해준다.
%c는 짐작했겠지만 character의 약자이며, 문자로 변환해준다.
3) 정수형(Integer)
정수를 담을 수 있는 자료형이며, 인티저(Integer) 또는 줄여서 인트(Int)라고 말하기도 한다.
이는 크게 세종류로 나눌 수 있다.
3-1) 숏(Short) / 키워드 short
숏 인트(Short Int), 숏 인티져(Short Integer)의 자료형이며, 2byte(16bit) 크기의 정수를 할당할 수 있다.
정수는 음의 정수와 양의 정수가 있으므로, 표현가능 범위는 0을 포함한 -32,768 ~ +32,767 까지 총 65,536 가지다.
3-2) 인트(Int) / 키워드 int
인트형은 컴파일러나 운영체제에 따라 메모리 할당 크기가 다를 수 있다.
일반적으로는 4byte(32bit)에 해당한다. 이는 -2,147,483,648 ~ +2,147,438,647 까지 총 4,294,922,296 가지다.
만약, 크기가 궁금하다면 sizeof(int) 함수를 호출하여 byte단위의 값을 확인할 수 있다.
3-3) 롱(Long) / 키워드 long
롱 인트(Long Int), 롱 인티저(Long Integer)의 자료형이며, 4byte(32bit) 크기의 정수를 담을 수 있다.
인트형과 마찬가지로 4byte(32bit)의 크기를 할당한다.
+) 부호의 유무
앞서 정수형은 음수와 양수가 있다고 했다.
이를 음의정수 전용 또는 양의정수 전용 자료형으로도 선언할 수 있다.
접두사로 unsigned가 붙게되면 양의 정수만 표현가능해진다.
이는 문자형에도 해당된다.
4) 부동소수점(Floating point number)
이는 실수를 표현할 때, 자연수와 소수점 아래 밑수,
그리고 지수에 해당하는 유효숫자로 나누어 표현하는 방식이다.
예를들어, 3.14를 3 x 10^-2 로 풀이하는 것과 같다.
결과적으로 소수를 담아야할 때 사용하면 된다.
4-1) 플로트(Float) / 키워드 : float
4byte(32bit) 크기의 공간을 사용하며, 표현 범위는 1.2Ε^-38 ~ 3.4Ε^38 까지다.
참고로 Ε는 로마자 Ε(엡실론; Epsilon)이며, 알파벳 e로 표기하기도 한다.
여기서 Ε의 의미는 밑이 10인 자연로그를 뜻한다.
4-2) 더블(Double) / 키워드 : double
8byte(64bit) 크기의 메모리를 할당하고, 표현가능 범위는 2.2Ε^308 ~ 1.8E^308 까지다.
쉽게 말하면 좀더 큰 실수값을 저장할 때 사용한다.
JAVA 코드 예)
float fi = (float) 3.141592; System.out.format("%.2f", fi);
변환문자 %.2f 에서 .은 소수점을 의미하고 숫자 2는 소수점 이하 둘째 자리까지 출력하겠다는 의미다.
그리고 f는 float 자료형을 나타내므로, 3.14만 출력된다. 이는 반올림을 적용한다.
결과)
5) 문자열(String) / 키워드 : string
문자를 나열한 것을 문자열이라 한다. 즉, 공백을 포함한 둘 이상의 문자로 이루어지면 문자열에 해당한다.
사실 자료형이라고 보기 어려울 수 있지만, 문자열의 활용도가 높으므로 적어본다.
자바에서는 별도로 string 객체가 존재하므로 여느 자료형처럼 이용할 수 있다.
하지만 C나 C++에서는 별도로 존재하지 않아서 직접 메모리 공간을 잡아줘야한다.
메모리 공간은 정적 또는 동적으로 할당할 수 있으며,
보다 자세한 내용은 차후 C/C++ 카테고리에서 다루도록 하겠다.
요약
구분 | 키워드(예약어) | 메모리 크기 | |
JAVA | C/C++ | ||
부울 대수 | boolean | bool | 1byte(8bit) |
문자형 | char | 1byte(8bit) | |
정수형 | short | 2byte(16bit) | |
int | 4byte(32bit) | ||
long | 4byte(32bit) | ||
부호 | 접두사 unsigned | 자료형에 따름 | |
실수형 | float | 4byte(32bit) | |
double | 8byte(64bit) | ||
문자열 | string | 없음 | 동적/정적 할당 |
마치며
간단한 내용인데 풀어쓰다보니 길어졌다.
앞서 스택과 큐를 설명하며 오버플로우와 언더플로우에 대해 잠시 짚고 넘어간 적이 있는데,
다음 자료구조 포스팅에서는 이들과 형변환(캐스팅; Casting)에 대해 살펴보겠다.
끝.
'IT > 자료구조' 카테고리의 다른 글
[특집] 해시(Hash) :: 개념, 해시 테이블, 해시 함수, 해시 태그, 해시 브라운 (0) | 2016.04.06 |
---|---|
[개념] 자료구조 :: 스택(Stack)과 큐(Queue) (0) | 2016.01.14 |