Data type
자료형은 값들의 집합 혹은 이 값들의 대한 연산들의 집합이다. 컴퓨터와 프로그래머에게 어떤 종류의 자료를 다루고 있는지 알려준다, 또한 자료가 어떤 값을 가질 수 있는지, 그 자료에 어떤 연산을 할 수 있는지를 제한한다.
자료형의 유형
자료형의 유형으로는 Basic Type과 Composite Type이 있다.
Basic Type
Basic Type은 기본 자료형이다. 예를 들어 int, boolean, string, char, float, double로 나뉜다. 분류 방식은 수치 타입, 불린 타입, 문자열 타입, 추가적으로 사용자 정의 기본 자료형인 열거형과 부분 타입으로 나뉜다.
* 수치 타입
* 정수 타입
정수 값을 표현하는데 사용하는 바이트 수로 구분한다. FORTRAN과 같은 언어는 한 가지 크기만을 제공한다. 반면, Java와 C/C++과 같은 언어는 여러가지 크기를 제공한다. JAVA의 타입으로는 1바이트 크기의 byte, 2바이트 크기의 short, 4바이트 크기의 int, 8바이트 크기의 long이 있다. C/C++은 비부호 정수타입을 제공하는데, 예를 들어 short int의 2바이트는 표현 범위가 ~32,768~32.767이지만, unsigned short int는 표현범위가 0~65.536이다.
* 부동 소수점 타입
부동 소수점 타입이란 지수와 가수를 구분해서 표현하는 방식이다. Primitive Type의 실수형 데이터 타입들은 값을 표현할 때 많은 범위의 값을 표현하고자 부동 소수점 방식을 사용한다. 지수란 주어진 수의 거듭제곱을 나타내는 수이고 가수란 실제 값을 의미한다. 정수와 같은 방식으로 실수를 표현하자면 너무 많은 메모리 영역을 차지하기 때문에 지수부와 가수부로 나눠 표현하는 것이다. 자바는 4바이트 크기의 float과 8바이트 크기의 double타입을 제공한다.
* 불린 타입
true와 false라는 두 개의 값을 제공한다. C를 제외한 대부분의 언어에서 제공하며 일반적으로 and연산자는 &&, or 연산자는 ||, not 연산자는 !이다.
* 문자열 타입
문자 코딩 기법을 사용하여 표현, ASCII와 유니코드로 나타낸 문자 타입, 문자열 타입은 기본 자료형이다. 언어별로 다양한 문자열 처리 방식을 지원하는데, C/C++은 char 포인터를 이용해 문자열 처리를한다. 또한, C++은 string 클래스를 이용해 문자열 처리, JAVA는 char 배열을 이용해, string 클래스를 이용해 문자열을 처리한다.
* 열거형
열거된 값들로 이루어진 타입이다.
* 부분 타입
기반 타입의 일부분 값들로 정의된 자료형이다.
Composite Type
Composite Type이란 기본 자료형으로부터 더 복잡한 자료형을 구성하는 방법이다. Composite Type은 레코드 타입, 배열 타입, 리스트 타입, 포인터 타입으로 나뉜다.
* 레코드 타입(구조체)
여러 개의 변수들을 묶어서 구성하는 자료형이다.
* 배열 타입
같은 타입의 연속된 변수들로 구성하는 자료형이다.
배열을 구성하는 변수 각각의 배열 요소 / 배열 이름과 순서를 나타내는 인덱스로 구분된다. C에서는 배열 크기가 정적으로 결정된다.
base를 배열의 시작주소라고 가정했을 때, A[i]의 주소는 base + i*sizeof(int)이다.
C/C++에서 사용하는 이차원 배열은 (자료형) (변수이름)[행의 수][열의 수]; 와 같이 정의된다. 예를 들어 int a[3][4];라고 정의하면 3x4의 행렬이다. 이차원 배열의 행 우선 배치는 첫 번째 행부터 배치하고 이어서 두 번째 행을 배치하는 방식이다. base를 배열의 시작주소라고 가정했을 때 3x4행렬인 경우 a[i][j]의 주소는 base + (i*4 + j)*sizeof(int)이다. 이차원 배열의 열 우선 배치는 첫번째 열부터 배치하고 이어서 두 번째 열을 배치하는 방식이다.
JAVA의 배열은 (자료형)[] 변수이름;, (자료형) 변수이름[];과 같이 선언한다. 배열 변수를 선언했다고 배열이 자동적으로 만들어지는 것이 아니고, 배열은 단지 참조 변수이다. JAVA배열은 동적객체로 배열의 크기가 실행 시간에 결정되는 일종의 객체이다. 배열 크기는 실행 시간에 new 연산자에 의해 배열이 생성될 때 결정된다.
* 리스트 타입
리스트는 항목들의 모음으로 다수의 항목을 집합적으로 처리하는데 유용하다. python의 대표적인 자료구조이며 []를 이용하여 정의하고 python에서는 배열 대신 리스트를 사용한다. 리스트는 배열과 달리 원소가 같은 타입일 필요가 없다. 또한 리스트의 원소로 리스트가 가능하다.
리스트의 유형으로는 하나의 리스트를 인덱스를 사용하여 부분 리스트로 분리하는 부분 리스트와, 배열의 크기가 동적으로 변하는 어레이 리스트가 있다. Java의 ArrayLiST가 대표적인 예이다.
* 포인터 타입
메모리의 위치를 값으로 사용하는 자료형이 포인터 타입이다. 포인터 변수 관련 구문, 포인터 관련 연산 예시는 다음과 같다.
* 포인터 변수 선언 예시
T *p;
* 포인터 변수에 대입 예시
p = E;
* 포인터가 참조하는 변수에 대입
*p = E;
* 크기 n의 메모리 할당 및 시작 주소 반환
malloc(n)
* 변수 x의 포인터(주소)
&x
* 포인터 변수 p에 저장된 포인터 주소참조
*p
'Dev > Language' 카테고리의 다른 글
[Language] 언어 분류(정적 타입 언어, 동적 타입 언어) 개념 정리 (0) | 2022.01.05 |
---|---|
[Language] Type Conversion에 대한 개념 정리 (0) | 2022.01.05 |