Computer Science/common

data type(자료형)의 개념

짠백이 2018. 11. 25. 23:21
반응형

이번 포스팅에서는 컴퓨터과학 분야에서 빈번하게 접하게 되는 용어인 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에 저장된 값을 출력해보았습니다.





1~2번째의 출력값부터 설명드리면, 조금 특이한 값이 출력되는것을 확인 할 수 있는데요.


각각의 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