이번 포스팅에서는 컴퓨터과학 분야에서 빈번하게 접하게 되는 용어인 data type (자료형) 개념과 종류에 대해
알아보고, 아주 간단한 이미지와 예제소스를 통하여 살펴보도록 하겠습니다.
( * 예제소스는 java를 사용했습니다.)
1. data 와 information
우선 기초 개념인 data(값)에 대해서 알아보겠습니다.
data는 어떤 의미일까요? 사전적 정의로는 '관찰이나 측정을 통해 수집된 값이나 사실' 을 말합니다
그리고 information(정보)는 '특정 목적을 위해 data를 가공한 것'입니다.
이해를 돕기위해 구체적인 생활속의 예시로 확인해보겠습니다. 어떤 남자에 대한 data는 다음과 같습니다.
[data]
신장(cm) : 174
체중(kg) : 63
그리고 해당 data를 비만도를 알아보기 위한 목적으로 가공하면 아래와 같은 information이 나옵니다.
BMI(비만도) : 체중(kg) / { 신장(m) * 신장(m) } = 20.81
[ BMI표 ]
18.5이하 : 저체중
18.5~24.9 : 정상
25.0~29.9 : 과체중
30.0 이상 : 비만
남자의 비만도 : 정상 (20.81)
2. data type (자료형)
2.1 개념
이제 본격적으로 data type의 개념에 대해 알아보겠습니다.
data type은 '데이터가 가지고 있는 고유의 성질'를 말합니다.
위의 생활 예시로 표현하면 아래와 같습니다.
[data] [data type]
174 = 신장(cm)
63 = 체중(kg)
그리고 실제 코드에서 예시로 표현한다면 아래와 같습니다.
[data] [data type]
100 = 정수 (short/int/long)
7.7 = 실수 (float/double)
"solt" = 문자열 (String)
프로그래밍언어에서 데이터를 저장하는 기본 단위인 variable은 type을 가지고 있으며, variable에는
선언시 지정되는 type과 일치하는 data만 저장 할 수 있습니다.
(* 언어에 따라 variable type을 지정하지 않을 수도 있습니다 ex) javascript : var x = 1 ; )
이러한 type은 크게 primitive type(기본형) 와 reference type(참조형)으로 분류 할 수 있는데 이를 기준으로
조금 더 구체적인 내용에 대해 알아보겠습니다.
2.2 primitive type (기본형)
primitive type란 직역하면 기본 + 형태/유형의 의미이며 종류는 아래와 같습니다.
(종류는 프로그래밍 언어에 따라 차이가 있습니다.)
- 논리 : boolean (1byte)
- 문자 : char (2byte)
- 정수 : short (2byte), int (4byte), long (8byte)
- 실수 : float (4byte), double (8byte)
만약, variable을 int type(정수형)으로 선언했는데 실수의 data를 저장하려고 시도한다면 저장하려는
data의 type(=8byte)보다 variable의 type(=4byte)이 작기 때문에 컴파일러는
'type mismatch' error를 발생시킵니다.
[예제소스]
이번에는 반대로 variable을 double type(실수형)으로 선언 후 정수의 data를 저장하려고 시도한다면
경고만 발생하고 컴파일이 가능하지만 결과적으로는 메모리가 낭비되는 상황이기 때문에
권고하는 방법이 아닙니다.
[예제소스]
2.3 reference type (참조형)
reference type란 직역하면 참조 + 형태/유형입니다. 무엇을 참조하는 type일까요?
바로 object(객체)를 참조한다는 의미이며, 이를 위해서 사용되는 data는 '메모리의 참조값(=주소값)' 이며,
java에서는 object(객체)의 참조값을 저장하는 용도로 사용합니다.
그리고 선언되는 type에 따라 variable이 메모리에 할당되는 크기가 유동적인 primitive type의 variable과는
다르게 reference type의 variable은 메모리에 할당되는 크기가 모두 동일합니다.
(* reference type의 variable은 C언어의 pointer와 동일한 역활을 합니다.
세부내용 참고 : http://solt.tistory.com/5?category=795285)
reference type의 종류는 아래와 같습니다.
- String
- array
- Class
- Interface
- 등등..
예제 소스를 통해 reference type에 저장된 참조값을 구체적으로 확인해보겠습니다.
[예제소스]
1~4번 줄에 class를 정의하였으며, main method 내부의 9번 줄에서는 int type의 4개의 element(요소)를 갖는 array(배열)를 생성 후 reference variable에 저장하였습니다.
11번 줄에서는 'ct'라는 이름의 reference variable을 선언 후 12번 줄에서 object를 생성 후 반환되는 참조값을
'ct' 에 저장하였습니다.
14번 줄에서 문자열을 생성 후 reference variable에 저장하였고 이후 println()으로 reference variable에 저장된 값을 출력해보았습니다.
각각의 object는 생성자(=method)에 의하여 메모리에 할당되고 주소값을 반환하게 되는데,
이를 new연산자에 의해 실행되는 컴파일러가 hashcode라는 참조값으로 변환한 것입니다.
( 형식 : 클래스명 @ hashcode )
마지막 줄의 출력값은 특수한 경우로써 String 내부에 미리 구현된 로직으로 인해 주소값이
변환된 형태인 hashcode가 아닌 object에 저장된 문자열이 출력됩니다. 그래서 String의 경우에는
마치 primitive type의 variable처럼 편리하게 사용 할 수 있습니다.
최대한 정확한 정보를 공유하고자 항상 신중하게 포스팅을 하고 있지만, 내용에 개선이 필요한 부분이 있을 수 도 있습니다.
혹시나 추가적인 보완이 필요하다고 판단되는 부분이 있다면 댓글로 조언해주세요. 참고하여 수정해놓겠습니다.
* 해당 포스팅이 도움이되셨다면 공감과 댓글 부탁드릴께요 ㅎㅎ
'Computer Science > common' 카테고리의 다른 글
[Thread] 동기화 이슈 처리방법 (java) (0) | 2020.04.23 |
---|---|
ElasticSearch 개념 및 구조 (0) | 2020.04.21 |
[Thread] muti Process VS muti Thread (0) | 2020.04.18 |
[Thread] 기초 (0) | 2020.04.18 |
[GIT] git 개념 및 구성 (0) | 2020.01.27 |